-
-
[原创]第三题 crackMe
-
2017-10-29 12:52
3405
-
1. 运行程序,OD附加到进程,GetDlgItemTextA下断点能定位到关键CALL 434EF0,里面处理消息事件
2. 然后这个程序存在很多的反调试,必须全部干掉
00430B10:检测了好多逆向软件的窗口类名
0042DA7D:单步检测
0042D389、004314F0、004317C0:反调试检测
004305B0:反调试调用的退出CALL,直接干掉
3. 下面就可以愉快的调试分析了!
base64特征还是比较明显的;
那个sm3也有一些特征数 0x7380166F、0x4914B2B9、0x172442D7,可以确定sm3算法
然后就是其他小语句的分析,通过调试看参数,静态看流程,分析结果如下
4. 然后目标就是 sm3(
base64_rev(
base64_rev(
input) ).subString(0, 3)) == inputString !!!大坑啊!!!
然后就去写程序跑吧,没有,怎么可能sm3的结果刚好能BASE64两次呢。。。最后才想到使用空串
5. 用od调试,在内存中发现空串的sm3数值
6. 然后第一个验证就过去了
7. 然后继续跑,第二个验证也过了。。。
8. 然后回过头来分析,183920f00e15a0433ee3a8fc90dd9ac164c4142ccf63ca189a8f645ec96ff8de 其实只是答案的前缀,因为用的是strncmp
然后再看看第二个验证,能通过是因为传入第二个验证的字符串,都是0x00,一个判断都进不去,肯定就执行函数尾部的return TRUE;
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法