前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反编译so库破解so

反编译so库破解so

作者头像
全栈程序员站长
发布2022-07-04 13:04:54
4.5K0
发布2022-07-04 13:04:54
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

所需工具

1.IDA_Pro_v6.8_and_Hex-Rays_Decompiler_

2.WinHex

3.ARM_ASM

背景:I2C通讯时报log CameraHal_Marvin: HAL-MOCKUP: HalReadI2CMem(1578): bus_num(7) or reg_addr_size(1) is invalidate

CameraHal_Marvin: OV2735: Sensor_IsiCheckSensorConnectionIss RevId = 0x00002735, value = 0x00000000 result = 13 CameraHal_Marvin: CAM_API_CAMENGINE: openSensor (IsiCheckSensorConnectionIss failed)

13代表无效的参数,我自己写一个I2C的读函数,读同样的寄存器是成功,所以怀疑so文件对I2C NUM大小做了判断,认为I2C7是无效的。所以想破解so,将对i2c num 的大小改大点。

基础知识:

(1)了解反编译成汇编后的结构,以及常用的汇编指令的意义

https://bbs.ichunqiu.com/thread-41629-1-1.html?from=sec

(2)实战预热

https://blog.csdn.net/m0_37766442/article/details/72903385

一、反编译so

使用IDA打开so

反编译so库破解so
反编译so库破解so

根据log信息或猜测查找需要破解的大致位置

如我需要搜索的log:bus_num(7) or reg_addr_size(1)

我们就搜索reg_addr_size这个字符串

反编译so库破解so
反编译so库破解so
反编译so库破解so
反编译so库破解so
反编译so库破解so
反编译so库破解so

我们找到了一处符合的字符串,双击上面的DATA_REF后的内容跳转到引用的代码段

反编译so库破解so
反编译so库破解so

代码段

反编译so库破解so
反编译so库破解so

根据我们的推测,如果对I2C num做判断肯定会使用if语句做比较,在汇编里也就是CMP指令,然后BLT或BL 、BGT进行跳转

我们看到打印这一段log的过程中没有CMP 和BL,所以很有可能这是if里面的内容,CMP在其他地方。我们看到上方有一个

loc_82036,这代表一段代码的标签处,类似C里面goto 的标签,那肯定其他地方会向这个标签做跳转

选中这个标签,右击

反编译so库破解so
反编译so库破解so

点击红框选项,就会列出所有向此处跳转的地方,这个so,也就在其上面,已经高亮了

反编译so库破解so
反编译so库破解so

我们看到有两个地方向此处跳转,也都有CMP语句和BL,应该没错了,大致分析下

CMP R0,#6 R0寄存器与立即数6做比较,大于6跳转到loc_82036

下面一个是大于等于5跳转到loc_82036

此处我们以大于6跳转为例说明如何破解,实际中可以结合函数参数个数等其他可能的原因猜测,排除一些跳转项,实在无法排除就一个一个试。

点中CMP R0,#6的地址处,然后切换到HEX View

反编译so库破解so
反编译so库破解so
反编译so库破解so
反编译so库破解so

Hex VIEW 可以切换数据格式,64位so用4字节格式,32位so用2字节格式

反编译so库破解so
反编译so库破解so

我们需要将CMP R0,#6 改成CMP R0,#8试一试

打开arm_asm工具,输入CMP R0,#6 , GO

反编译so库破解so
反编译so库破解so

可以看到这条指令对应的2字节16进制是0628

看IDA里的值 也是2806 应该是大小端的问题,不影响,我们修改时注意下就可以

反编译so库破解so
反编译so库破解so

看这条指令的物理地址,以便在winhex内修改

反编译so库破解so
反编译so库破解so

是80026,使用winhex打开这个so,跳转到这一地址

反编译so库破解so
反编译so库破解so

我们将06改成08保存

反编译so库破解so
反编译so库破解so

替换so,不再打印那个错误log,读正常了,但是写还有问题,同样的方法修改I2C写操作里的值,问题解决

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/149366.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档