好友
阅读权限30
听众
最后登录1970-1-1
|
h_one
发表于 2013-4-23 17:27
小菜一直在吾爱上索取,第一次发帖,希望能对一些朋友有帮助,若是大牛可以return
使用工具: od, peid等
peid查壳没壳, 看看导入表 貌似这个crackme比较简单的
od走一遍,下断GetDlgItemTextA(401142处)
call 401221 对假吗处理
后面有一个call 401241跟进看看
跟进call401296 为mov al, cc(有反调试,对断点的检查我刚在401142下了断点注意)
继续跟吧跟出401221 ,看这段走完是什么
发现若eax = 0 走向正确的提示,那就跟的这样走吧。
回到前面那个地方
如图:
以上面的分析要使ecx等于0 (mov eax, ecx)
mov edi, 00401120
add edi, 0B (定位到内存中方数据地方)
mov esi, offest 00403284(假码计算后的结果)
mov ecx, 9
dec ecx
lods byte ptr [esi] (取esi所指向的空间中取出一个字节,放到al中)
scas byte ptr [edi] (edi所指向的字节与相应的al值相减)
je 跳回到dec ecx
呵呵因此就构造与0040112B所指向的相等(8字节长)
mov al, 字节
rol al, 5
xor al, 15
重新输入我算出的结果发现不对,,,,,,nandao,,这条路是骗人的,是int 3在做怪。。。。
重头再来,注意想到会对断点的检查
继续对GetDlgItemTextA下断(401142地址)
进入401241仔细分析
lea edi, [<ModuleEntryPoint>] (401000)
mov ecx, 297 (检查字节个数)
call 00401296 (mov al, cc)
repne scas byte ptr [edi] 扫描edi指向的字节,是否等于CC,
运行该句,发现ecx = 154
说明从401000开始,第142处为CC
刚才我在401142下断了,,,会产生CC .....
同理后面是对一系列的函数是否下断检查
若检查到有断点 会返回。没有断点时403240中的值+1
所以为了避免程序检测到断点,而又能让我们的程序断下来,,,那么在检查前找个地方断下来
我找的 40109E
程序断下来后将断点删除,,,,,,,终于上路了,,,,
跟踪发现会有四处调用了call 00401241 对断点的检查,,那么403240值最终会变成4
到,
, call 401201 对假码运算处理
mov al, zijie
xor al, 41
rol al, 3
mov zijie, al
地址401198处
mov eax, 5
mul byte ptr [403240] (eax*4)定位到正真密码处理后的结果
mov esi, offset 00403268 (假码处理位置)
mov edi, 00401175
add edi, eax 定位到正真密码位置
mov ecx, 9
dec ecx
lods byte ptr[esi]
scas byte ptr[edi]
je 跳到dex ecx
or ecx, ecx
jz 004011E1 当假码处理后的结果与edi指向的结果依依相等时,使ecx = 0,,,跳转到正确框
哈哈搞定了。。。。
edi 内存中的正确数据:91 71 39 A9 41 11 21 03
所以把这个数据逆推就搞定了。。。。。
__asm
{
xor eax, eax
mov al, zhengquezijie
ror al, 3
xor al, 0x41
mov jieguo, al
}
按照这个结果为softice!
总结: 对int 3,断点的检查,关键汇编
lea edi, [<ModuleEntryPoint>] (401000)
mov ecx, 297 (检查字节个数)
call 00401296 (mov al, cc)
repne scas byte ptr [edi] 扫描edi指向的字节,是否是al = CC,
los指令 从ds:si所指向想的空间中取出一个字节放入al中
scas 从 es:di 所指向字节,与相应的al想减,,所得到的差来设置有关标志位。。。。。。 |
-
-
fan9.zip
5.6 KB, 下载次数: 12, 下载积分: 吾爱币 -1 CB
免费评分
-
查看全部评分
|