首页
社区
课程
招聘
[原创]第三题 crackMe
2017-10-29 12:52 3405

[原创]第三题 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虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (3)
雪    币: 424
活跃值: (40)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
何小龙 2 2017-10-30 18:06
2
0
666
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
聖blue 2017-10-30 19:09
3
0
不错!
雪    币: 2308
活跃值: (3385)
能力值: ( LV13,RANK:405 )
在线值:
发帖
回帖
粉丝
奔跑的阿狸 1 2017-10-30 20:09
4
0
聖blue 不错!
谢谢
游客
登录 | 注册 方可回帖
返回