android加固系列—3.加固前先学会破解,静态修改so
2016-01-15 10:20
351 查看
【版权所有,转载请注明出处。出处:http://www.cnblogs.com/joey-hua/p/5138585.html】
项目jni的关键代码(项目地址见文章底部),获取当前程序的包名com.example.shelldemo和com.example.nocrack对比,正常运行结果是this app is illegal,编译jni我就不介绍了,项目中也带了编译好的so
1.工具介绍
IDA6.5,静态分析so文件用
010 Editor,修改so文件16进制码
2.IDA分析so
把so拖入IDA直接定位到关键代码处,BEQ意思是上一行的CMP比较指令如果R0等于0就跳转到loc_ED0处,也就是成功运行处。但实际程序运行后R0的值不等于0.
然后进入options | General
如下显示,把每行对应的16进制机器码显示出来了
可以看出跳转指令B对应的16进制机器码为E0,我们现在要做的就是把0EC2处的指令改成B loc_ED0,意思就是不用判断上一行的CMP指令直接跳转。
2.010 Editor修改so
打开010 Editor,把so文件拖入,找到0EC2处,注意一个数字是4位,两个数字是8位一个字节,所以从0EC0处开始数第三个(起始0)
手动把D0改成E0,注意一个数字一个数字的改
保存,然后重新运行项目,奇迹就发生了,程序running successfully了。
其实也可以把修改后的so重新拖入IDA可以看出0EC2行变成了B而不是曾经的BEQ
【crackme项目地址】
【IDA工具地址】
【010 Editor地址】
项目jni的关键代码(项目地址见文章底部),获取当前程序的包名com.example.shelldemo和com.example.nocrack对比,正常运行结果是this app is illegal,编译jni我就不介绍了,项目中也带了编译好的so
1.工具介绍
IDA6.5,静态分析so文件用
010 Editor,修改so文件16进制码
2.IDA分析so
把so拖入IDA直接定位到关键代码处,BEQ意思是上一行的CMP比较指令如果R0等于0就跳转到loc_ED0处,也就是成功运行处。但实际程序运行后R0的值不等于0.
然后进入options | General
如下显示,把每行对应的16进制机器码显示出来了
可以看出跳转指令B对应的16进制机器码为E0,我们现在要做的就是把0EC2处的指令改成B loc_ED0,意思就是不用判断上一行的CMP指令直接跳转。
2.010 Editor修改so
打开010 Editor,把so文件拖入,找到0EC2处,注意一个数字是4位,两个数字是8位一个字节,所以从0EC0处开始数第三个(起始0)
手动把D0改成E0,注意一个数字一个数字的改
保存,然后重新运行项目,奇迹就发生了,程序running successfully了。
其实也可以把修改后的so重新拖入IDA可以看出0EC2行变成了B而不是曾经的BEQ
【crackme项目地址】
【IDA工具地址】
【010 Editor地址】
相关文章推荐
- 阅读《Android 从入门到精通》(11)——下拉列表
- Android学习路之Android中的接口回调(一)
- Android技术--android屏幕适配详解
- AndroidStudio如何添加aidl文件
- Android 高效加载大图片避免OOM
- Android四种LaunchMode
- Android开发之调用系统的ContentProvider——短信的获取和备份
- Android生存指南:解Bug策略和思路
- Android应用启动速度优化
- Android 让输入框输入指定字符的办法
- android is not translated in xxx解决方案
- android中handle和线程的关系是什么?
- android开发游记:仿支付宝余额数字累加滚动效果的实现
- Android仿IOS布局上拉下拉回弹,并显示底层控件
- No resource found that matches the given name 'android:WindowTitle'
- android的Popupwindow根据手势来贴边划出
- Android studio:library module依赖篇
- Android EventBus在Fragment中不起作用的解决方法
- Android传递Bitmap对象在两个Activity之间
- Android入门- 关于Activity下的onCreate方法的参数详解