首页
社区
课程
招聘
[旧帖] [求助]大家给看下这段代码 0.00雪花
发表于: 2012-1-31 13:12 1529

[旧帖] [求助]大家给看下这段代码 0.00雪花

2012-1-31 13:12
1529
本人是一个纯粹的菜鸟,最近刚学反汇编,就下了个crackme  ,  对大家来说,可能太过简单,但是 我硬是没看懂。。(没加壳)。。《是将关键代码贴出,求正解:

从代码可以看出分别有三个比较 ,于是我在第二个下了断点。 然而,crack me  就卡在那里了。
而且这三个比较,到底是谁跟谁比,也没有弄清。。
   在就是 麻烦大家给分析一下这段代码的整体结构。(尽量详细点吧)   。谢谢大家。
另外,我也将这个crackme 上传了。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 439
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
前四行就是比较结果..如果你连16进制和10进制转换都不会那就没办法了.
2012-1-31 13:19
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
CMP DWORD PTR SS:[ESP+8],111 ;比较 esp+8 地址下的内容 要等于111(十六进制) 否则就失败
JNZ SHORT 1.004019C ;根据上面的比较结果 不相等就跳转
下面也是一样的

00401063 地址处的 CALL 1.00401200 是关键算法 返回值 EAX需要等于1 如果不等于1 就会弹出注册失败对话框

同是菜鸟 高手见笑 如果有错误还请指正
2012-1-31 13:35
0
雪    币: 639
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上这么说明白多了,呵呵,不过CMP EAX , 1
后面那两个PUSH是干啥的呢....
另外楼主如何找到关键代码的
2012-1-31 14:18
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
发个IDA下的伪代码,如果有点编程知识的就比较清楚啦。

int __stdcall DialogFunc(int a1, int a2, __int16 a3, int a4)
{
  if ( a2 == 273 && a3 == 1002 )    //273==0x111, 1002==0x3EA 数制转换
  {
    if ( sub_401200() == 1 )   //调用函数sub_401200,返回值为判断的结果
    {
      MessageBoxA(hWnd, "Registration Successful!\nGood Job!\nPlease contact:xufeng0325@gmail.com", "crackme", 0);
      return 0;  
    }
    MessageBoxA(hWnd, "Registration Fail!", "crackme", 0);
  }
  return 0;
}
2012-1-31 14:51
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
PUSH是从右向左函数的参数依次入栈
2012-1-31 15:02
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
断点下到第三个jne的前两行 代码。然后直接运行程序,就会卡到那里,然后你点F8一步步跟,就会看到第三个才是关键跳,想怎么跳,你都可以直接改汇编代码,然后保存。
2012-1-31 18:39
0
雪    币: 38
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
  首先,这个crackme打开 后不是出现了  对话框吗?  你随便打几个,再按按钮,就出现了:“Registration fail"     就是失败的意思。   那么为什么会出现这个呢?于是就判断,程序首先检测你输入的 东西  是不是真的密码(乱说的,可能是注册码) 然后 ,如果失败,就出现:“Registration fail"  那么 我就在ollybdg中 载入, 点右键有一个“超级字符串参考” 再 查找ASCII 字符。      你就会找到关键代码 。  其实 应该大多都是这么分析的吧!
2012-1-31 23:14
0
雪    币: 38
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢!可我不想暴力。
2012-1-31 23:16
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
00401050   .  cmp dword ptr ss:[esp+0x8],0x111
00401058   .  jnz short 1.0040109C
0040105A   .  cmp word ptr ss:[esp+0xC],0x3EA
00401061   .  jnz short 1.0040109C
00401063   .  call 1.00401200                          ;  关键CaLL
00401068   .  cmp eax,0x1
0040106B   .  push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL
0040106D   .  push 1.0040508C                          ; |Title = "crackme"
00401072   .  jnz short 1.0040108A                    ; |关键跳  实现就跳过注册成功的提示  所有不让它实现

00401074   .   mov eax,dword ptr ds:[0x4056B8]         ; |
00401079   .   push 1.00405044            ; |Text = "Registration Successful!
Good Job!
Please contact:xufeng0325@gmail.com"

0040107E   .   push eax                                 ; |hOwner => 003A0FF8 ('CrackMe0.1 By Ferris',class='myWindowClass')

0040107F   .  call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA
00401085   .  xor eax,eax
00401087   .  retn 0x10
0040108A   >  mov ecx,dword ptr ds:[0x4056B8]          ; |
00401090   .   push 1.00405030                          ; |Text = "Registration Fail!"
00401095   .  push ecx                                 ; |hOwner => 003A0FF8 ('CrackMe0.1 By Ferris',class='myWindowClass')

00401096   . call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA
0040109C   > xor eax,eax
2012-2-1 03:54
0
游客
登录 | 注册 方可回帖
返回
//