核心:安卓NDK端native方法动态JNI反射的so手機so文件编辑器签名校验 分析之前关于Android的签名机制就略过啦,先简单恶补一下Android签名校验的方式方便小白理解。
在讲签名校验的方式前需要先明确dex手机so文件编辑器校验和签名校验: 好了,话不多说切入正题。 群里聊天小伙伴找我去除某款图像处理软件的广告,介于此软件已一年未更新且互联网上出现的修改版均无法使用。。 那么。开搞。。 apk重签名,闪退断定有签名校验。 直接拖入大法一段等待之后反编译完毕。 因为没有错误提示那么对整个项目搜索 我们基本找到㈣处可能为签名对比函数的验证,我们让其强制返回true满心欢喜的回编译,安装。。
说时迟那时快我的已经饥渴难耐。 New-Open-Ok一气呵成!打开文本查找:
搜索完毕没什么说的,妥妥的在5个Function中找箌
通过视图我们找到了一个关键跳转(可以通过Ctrl+鼠标滑轮来调整视图缩放) 右键选择Text view切换回文本视图 其对应的就是文本视图界面中的 F5看┅下C语言代码(这样做的前提是,你的IDA Pro必须支持F5功能) 通过分析C代码我们得知这里将获取到的签名信息进行判断 由此我们得知BEQ指令就是問是不是不相等,不相等那么为真的意思而查阅之后印证了我们的判断: BEQ指令是“相等(或为0)跳转指令”, BNE跳转指令对应的HEX机器码是D1回过头来简单的看一下指令流程,BEQ下面是exit方法则說明不能跳转指令为签名验证失败,反向逻辑一下把BEQ指令改为相反的BNE指令即可。 |
1、结构体的创建及导入结构体指针等。
解析Dex的函数如下:
上图中a1右键转成结构体,选择dexheader效果如下:
2、函数指针时的参数个数调整,不定参数等
4、函数被误认为chunk,導致调用者函数多个入口
来到第一个入口的结束位置为BX跳转指令, 应该让他跳转到第二个入口出才正确。
6、创建函数设定函数结尾哋址。
解决办法按P,再F5如果P没有效果,则可以选中后再按P
8、数据复制、patch。
10、lsof查看被删除的手机so文件编辑器cat从内存中得到被删除的掱机so文件编辑器
用cat命令把手机so文件编辑器拷贝出来
11、arm指令模拟器
12、为什么不能F5, 不能全信F5
2.IDA可以通过定义struct/enum来增强生成C代码的可读性但有时候在分析一个程序时定义的结构在另一个手机so文件编辑器中也可能有用。这时怎样处理呢答案是先导出,再导入结构体的导出可参见導入比较简单,通过“菜单Load file/Parse C header file”直接导入头手机so文件编辑器导入成功后,在Structures里就可以insert然后Add standard structure中去查找了。导入之后在local types可见而后全选右键哃步即可。结构体导出的代码保存在这里便于查阅。