首页
社区
课程
招聘
[原创]SantMat-ReverseMe #1
2007-4-27 21:50 6233

[原创]SantMat-ReverseMe #1

2007-4-27 21:50
6233
【文章标题】: SantMat-ReverseMe #1
【文章作者】: Nukou.G
【软件名称】: SantMat-ReverseMe #1
【下载地址】: http://www.crackmes.de/reversemes/reversemes/rm_santmat.zip
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
      这个ReverseMe要求把程序的第一个窗口改造成一个密码保护窗口,以阻止"Dr.Evil"使用这个"deadly program".......
  
      说到密码我就想到GetWindowText和lstrcmp。幸运的是程序中有这两个函数,而且还是在一起出现的:
  004013DA  |.  68 00020000   push    200                              ; /Count = 200 (512.)
  004013DF  |.  68 28344000   push    00403428                         ; |Buffer = reversem.00403428
  004013E4  |.  FF35 00344000 push    dword ptr [403400]               ; |hWnd = NULL
  004013EA  |.  E8 8D010000   call    <jmp.&USER32.GetWindowTextA>     ; \GetWindowTextA
  004013EF  |.  68 F7314000   push    004031F7                         ; /String2 = "Here is your mission, if you choose to accept it:"
  004013F4  |.  68 28344000   push    00403428                         ; |String1 = ""
  004013F9  |.  E8 5A010000   call    <jmp.&KERNEL32.lstrcmpA>         ; \lstrcmpA
  看看就知道作者已经为我们做完一部分工作了:字符串取出来了,也比较过了,但是没对比较结果做处理。明显是要我们继续比较的工作嘛:
  _compare:
  test eax,eax
  je _right
  invoke MessageBoxA, NULL, "Wrong password!Muhaha!", "Top Secret". MB_OK|MB_APPLMODAL
  jmp 0401464
  _right:
  invoke DestroyWindow, HWND
  jmp 0401406
  找个位置把这段代码写进去,运行一下~你会发现跟没改一样,因为我们没有输入密码。
  回到位置
  004013EF  |.  68 F7314000   push    004031F7                         ; /String2 = "Here is your mission, if you choose to accept it:"
  004013F4  |.  68 28344000   push    00403428                         ; |String1 = ""
  004013F9  |.  E8 5A010000   call    <jmp.&KERNEL32.lstrcmpA>         ; \lstrcmpA
  看来要把String2当密码,String1当输入了。跟踪一遍就会发现GetWindowTextA取的就是文本为"Here is your mission, if you choose to accept it:"的那个窗口的字符串,怪不得我们加的保护措施一点用都没有~用于输入的那个文本框的风格被设置成了禁用,想用它作为输入框必须把风格改回来:
  004011B4  |.  68 04080050   push    50000804                         ; |Style = WS_CHILD|WS_VISIBLE|804
  004011B9  |.  68 F7314000   push    004031F7                         ; |WindowName = "Here is your mission, if you choose to accept it:"
  把004011B4位置的push 50000804改成push 50000000
  然后就是密码了,总不能让密码输入框里的默认内容就是密码吧?
  我选择了403000位置的字符串"Simple Window",现在把004013EF位置的push    004031F7改成push    00403000程序的密码就变成Simple Window了。
  
--------------------------------------------------------------------------------
【经验总结】
  这个ReverseMe给我个提示:一些我们不想让别人运行的程序可以用类似的方法添加一个密码保护功能。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年04月27日 21:41:21

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
打赏
分享
最新回复 (1)
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小剑 2007-4-27 22:19
2
0
好文,要顶的啊
游客
登录 | 注册 方可回帖
返回