-
-
[原创]实战:AliCrackme
-
发表于: 2020-9-12 14:13 4655
-
将AliCrackme程序拖入jdax-gui进行分析。
1.从xml中找到程序入口点,如下图所示。
2.分析Oncreate,前面是布局初始化和设置监听的操作,如下图所示。
3.点击onclick里的内容,如果这个函数返回值为真,就进行页面跳转,否则显示弹窗失败,如下图所示。
4.点击函数,发现被native修饰,说明是使用NDK开发,直接分析so库,如下图所示。
5.加载这个so库,如下图所示。
1.使用压缩打开程序的压缩包,在lib中找到so库,如下图所示。
2.将so拖入IDA,在模块列表中查找JNILoad或者JAVA函数,搜索找到JNI函数,如下图所示。
3.进来后,直接F5,查看伪代码,修改参数类型和类名,如下图所示。
4.根据伪代码分析逻辑,找到动态注册函数RegisterNative,最后一个函数调用了GetEnv,也就是说,java的调用的方法并不是通过静态注册,如下图所示。
5.继续寻找静态注册,如下图所示。
6.修改前面两个参数,如下图所示。
7.查看最后一下参数,看到java代码对这个方法的调用处,发现一个字符串,如下图所示。
8.修改第三个参数,修改的效果,如下图所示。
9.将str给v4,然后作为参数给GetStringUTFChars函数传进去,将返回值给v5,如下图所示。
10.接着是一个while死循环,如下图所示。
11.对比v6和v7,如果不相等,直接break,然后返回给java0,如下图所示。
12.如果v7为空,取反为真,就表示结束对比,直接返回v7,否则v7取反一直为0,不会执行这里,继续比较,如图8.17所示,直接动态调试来,查找v7的地址即可。
1.在JNI_load里面,在执行完这个函数时,程序直接FFFFFFFFF,传了四个参数,如下图所示。
2.F7进来该函数,显示是创建一个线程,如下图所示。
3.直接nop掉即可,继续向下执行,如下图所示。
4.继续往下走,如下图所示。
5.一路F8到底,发现程序没什么变化,如下图所示。
6.与密钥有感的逻辑肯定是在静态注册,已经分析过静态注册的伪代码,直接在这里下断,然后F5识别伪代码,同步伪代码到汇编窗口,通过静态分析已经知道字符串对比的地方,直接这里下断点,如下图所示。
7.观察此时寄存器的值,R2是要对比的值(这个就是正确密钥),如下图所示。
8.取R2地址处的第一个值,a的ASCALL为0x61,如下图所示。
9.R0地址处的是我们自己输入的,如下图所示。
10.R1就是我们自己输入字符的第一个字母,z的ASCALL,如下图所示。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [转帖]无需脱壳抓取软件加密包方法(逆向破解) 10704
- [分享]Android逆向——RSA加密算法 4110
- [原创]普通协议(HTTP)与安全协议(HTTPS) 3996
- [转帖]Android App加固原理与技术历程 4183
- [分享]实战分析人X的HTTP协议 5281