170626 逆向-Crackme之005
来源:互联网 发布:vc 多线程编程 编辑:程序博客网 时间:2024/05/24 05:17
1625-5 王子昂 总结《2017年6月26日》 【连续第267天总结】
A.Crackme(5)
B.终于在XP中成功脱掉UPX的壳了,OD+DEDE动静结合看吧
DEDE中显示出有这些事件,逐个识别分析
两个计时器,Timer1是用来使四张图片循环滚动的;Timer2点开就是一堆cmp,猜测这个就是最终通过的地方了,到OP中跳转到相应RVA下断然后爆破,下方按钮变为注册了字样表示成功
那么分析一下Timer2的cmp分别是哪些吧,一一记录下来:
Timer2:
304==C34
308==230D
310≠F94
318==&314
31C≠3E7
有5个全局变量的值要求,那么或者寻找这些值的赋值位置,或者先一一分析dede中显示的汇编代码
这里我先是把摆在眼前的汇编代码一一看下来了:
308初值 28E
30C初值 9
314初值 B
318初值 0
按下按钮ButtonDown:
左击时cl=0,右击时cl=1
308≠230D时
cl==1时308=308+3
cl≠1且308小于294时 令308=230D
单击按钮ButtonClick:
31C=3E7
鼠标移动FormMouseMove:
2E0是图片3的ID,47是可见属性
2DC是图片2的ID,
[2E0+47]==1且X>e2且Y>12c时 310=10//图片3出现时,鼠标移动到右下角
[2DC+47]==1且X<17且Y>12c且310=10且30C≠9时310=F94 //图片2出现时,鼠标移动到左下角
30C==0时 314=41
30C==1时 314=3D
30C==2时 314=34
30C==3时 314=DF
310==F94时进行getText和StrCmp,若txt='ajj'则把30C的值显示出来
双击Text2时:
当text1的长度是3的倍数、text2的第二位是'_',第六位是','时
30C=0/1/2/3
双击Pannel(即图片框的空白部分):
308==29D时 dl=1
使edit2可用
bl表示button,即左击或右击
图片1点击:
bl==0时318+2
bl==1时318+0x11
图片2点击:
bl==0时318+3
bl==1时318+0x13
图片3点击:
bl==0时318+5
bl==1时318+0x17
图片4点击:
bl==0时318+7
bl==1时318+0x1B
由于dede的反汇编参考没有参数,所以刚开始函数中的bl、cl等等都不明白什么意思
后来参考了一下另外一篇,才知道应该是左击右击、坐标等等的参数
其实应该想到的。学到啦
另外,每个控件都有一个ID,在IDA中可以直接搜索字符串来查找
当检测和获取属性的时候都会通过ID来指定
大体上通过函数分析以后就能明白顺序了,其他遗漏的参数赋值找不到的话就通过IDA的搜索功能,这是非常方便的
注意有一个Edit2DblClick事件,在第一行地址下断,双击文本框发现并没有触发
到FormCreat事件中寻找,发现了第二个Edit控件,在IDA中搜索该控件的ID,然后到OD中下断跟踪
发现在00446D49处有一个获取 X:\ajj.126.c0m\j\o\j\o\ok.txt 文件的API,下面有与“ajj写的CKme真烂!”比较的StrCmp
。通过这个判断会改变Edit2的一个属性,猜想应该就是可见了。
X盘符有点麻烦,幸好我是在虚拟机中处理的
出现Edit2以后还是不可用的,继续搜索该控件相关的事件,跟到了Panel1DblClick事件
另外一篇分析中提到了dl=0和dl=1的控制方法
之前分析的时候只看到了dl=1,然后进入一个call,这个call不知道是干啥的
由控件ID相关猜测是令Edit2可用的改变,那么要让308=29D,只需要右击按钮5次即可(左击会触发Click事件使得注册失败)
总结:
首先创建X:\ajj.126.c0m\j\o\j\o\ok.txt ,内容为“ajj写的CKme真烂!”,使得Edit2出现,同时304=0xC34
然后右击注册按钮5次,使308=29D
然后双击图片空白处,使Edit2可用
接着输入注册名和Edit2,要求为注册名长度是3的倍数,Edit2的长度为8,第二个字符为'_',第六个字符为','
然后双击Edit2,,计算出30C的值
在图片3可见时把鼠标移动到右下角,使310=10
在图片2可见时把鼠标移动到左下角,使310=F94,并计算出314的值
然后将注册名改为ajj,此时将会显示出30C的值
然后再在图片3可见时把鼠标移动到右下角(否则也会注册失败)
显示的值和图片的对应点击办法有多种情况,自由计算,只要最终318=314即可
更详细的思路参考http://www.52pojie.cn/thread-366291-1-1.html,这个CM非常复杂,虽然折腾了一下午加一晚上,但是学到了很多新东西,很有价值
C. 明日计划
CISCN
- 170626 逆向-Crackme之005
- 170531 逆向-CrackMe之007
- 170601 逆向-CrackMe之008
- 170602 逆向-CrackMe之009
- 170604 逆向-CrackMe之013
- 170604 逆向-CrackMe之014
- 170606 逆向-CrackMe之015
- 170610 逆向-CrackMe之019
- 170613 逆向-CrackMe之023
- 170617 逆向-CrackMe之024
- 170619 逆向-CrackMe之033
- 170620 逆向-CrackMe之034
- 170621 逆向-CrackMe之027
- 170625 逆向-Crackme之010
- 171026 逆向-Patch(CrackMe之41)
- IDA Pro逆向实战之Crackme(简单篇)
- 序列号型CrackMe逆向之OD技巧篇
- 序列号型CrackMe逆向之IDA技巧篇
- 常用分析日志shell命令
- 字符串相关的高频面试题
- synchronize和volatile含义,使用
- Validate US Telephone Numbers
- 设计模式-工厂模式
- 170626 逆向-Crackme之005
- debian安装apache2成功之后,在web请求显示的文档 翻译
- VMware虚拟网卡
- SICP-2.2-String
- LeetCode 66. Plus One
- Linux下为文件增加列的shell脚本
- 论文《Recurrent Convolutional Neural Networks for Text Classification》总结
- 将自己的时间戳转换为几分钟前,几小时前,几天前
- com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertP