频道栏目
首页 > 安全 > 系统安全 > 正文

逆向入口切入

2005-08-18 12:37:51           
收藏   我要投稿

来源:www.hackbase.com 
 

      逆向入口切入

      逆向分析,最开始的一步就是寻找入口点。虽然可以破墙而入,但为了防止“墙后面还是一堵墙”,因此我们还是喜欢去撬门锁。一般来说,破解的话,找一些MessageBox注册提示,网络程序会考虑搞网络api,找到了正确的入口,就可以登堂入室,为所欲为。
      但是一般的软件逆向分析,入口或许稍微难找一些,有时因为找不到正确的分析入口而放弃分析。本次目标是某股票分析软件。
      该软件将根据股市信息计算出的数据以柱状显示在坐标系中。我们的目标是找到计算这些数据的代码。找到了这些代码,要弄懂他们就只是时间问题了。
      既然是柱形图显示,希望大家先看一下GDI编程,稍微瞅瞅就行,毕竟这里的关键是找到计算柱形图数据的代码。柱形图变换菜单为“查看”/“显示柱状参数”,因此可以从这个菜单消息入手。
      找菜单消息处理有很多方法,我比较常用相近处理法。因为菜单消息处理函数都离得很近,所以如果可以找到一个菜单的处理地点,其他菜单函数也相应不远了,这就是我所谓的相近处理法,因为我不会脱壳,也懒得学OD那些高级技巧,被逼无奈而已……….
      先运行股票分析软件,经过研究,F7键对应的“今日提示”菜单,有点MessageBox的味道,于是用OD附加进程。下MessageBox断点,在软件中按F7,被OD拦截,Ctrl
      + F9返回调用处:

      0041A64B push 0
      0041A64D push 0043B2FC ; |Title = "今日提示"
      0041A652 push 00491E80 ; |Text = "  …..?...
      0041A657 mov ecx,dword ptr ss:[ebp+8] ; |
      0041A65A push ecx ; |hOwner
      0041A65B call dword ptr ds:[42D17C] ; MessageBoxA
      0041A661 jmp 00422EB2

      继续Ctrl + F9返回上一层调用:

      77E1A411 push dword ptr ss:[ebp+18]
      77E1A414 push dword ptr ss:[ebp+14]
      77E1A417 push dword ptr ss:[ebp+10]
      77E1A41A push dword ptr ss:[ebp+C]
      77E1A41D call dword ptr ss:[ebp+8]
      77E1A420 cmp dword ptr ss:[esp+4],DCBAABCD
      77E1A428 je short user32.77E1A43B

      幸运的话这个call dword ptr ss:[ebp+8]或许是菜单消息主处理函数,如果在这里下断点,拦不住其他菜单操作,那可以尝试继续Ctrl
      +
      F9返回更上一层调用函数,一直到发现主处理函数。但不幸的是上面代码处于User32.dll领空,更不幸的是对软件的任何操作都会被这个函数拦截,事实上这个函数是消息处理函数,如B哥所说,晃一下鼠标都要被他拦住。
      不过正所谓柳暗花明又一村,如果你乐意,可以在这里下条件断点,但我更愿意继续翻一下最开始的MessageBox 。光标定位在

      0041A64B push 0 ; /Style = MB_OK|MB_APPLMODAL

      根据OD提示,该句代码被引发自:

      0041A513 mov ecx,dword ptr ss:[ebp-7C]
      0041A516 xor eax,eax
      0041A518 mov al,byte ptr ds:[ecx+42303F]
      0041A51E jmp dword ptr ds:[eax*4+422FDF] ;-------典型的消息Table跳转

      上面的jmp,是比较典型的条件跳转,根据eax不同,跳向不同位置。在这个地方下断点,会发现一般的操作,软件不会被中断了,说明大部分消息处理都不经过这个地方。但是随便找一个菜单点一下,很明显被断在这个地方。
      那么点一下需要分析的柱形参数菜单,被OD拦截在此,继续单步运行,如下:
      0041C47E movsx edx,word ptr ds:[447102]
      0041C485 neg edx
      0041C487 sbb edx,edx
      0041C489 inc edx
      0041C48A mov word ptr ds:[447102],dx
      0041C491 movsx eax,word ptr ds:[447102]
      0041C498 test eax,eax
      0041C49A jnz short .0041C4DE ;------跳

      到此:

      0041C4DE push .0043B3A4
      省略几句…….
      0041C4EF mov eax,dword ptr ds:[446C98]
      0041C4F4 push eax ; |hMenu => 02170742
      0041C4F5 call dword ptr ds:[42D180] ; ModifyMenuA
      0041C4FB push 0043B3B4
      0041C500 push 91 ; |NewItemID = 91 (145.)
      0041C505 push 0 ; |Flags = MF_BYCOMMAND|MF_ENABLED|MF_STRING
      省略几句…….
      0041C510 call dword ptr ds:[42D174] ; |GetMenu
      0041C516 push eax ; |hMenu
      0041C517 call dword ptr ds:[42D180] ; ModifyMenuA
      0041C545 add edx,97
      省略几句…….
      0041C54B mov dword ptr ds:[446CDC],edx
      0041C551 push 1 ; /Erase = TRUE
      0041C553 push .00446CD0 ; |pRect = 00446CD0 {732.,-80.,837.,636.}
      0041C558 mov eax,dword ptr ss:[ebp+8] ; |
      0041C55B push eax ; |hWnd
      0041C55C call dword ptr ds:[42D188] ; InvalidateRect
      0041C562 xor eax,eax
      0041C564 jmp .00422EB2

      清注意右边的注释,上面说白了就是修改一下菜单提示内容,然后调用InvalidateRect 函数。再往下就跳出当前函数:

      00422EB2 pop esi ; 0012FF20
      00422EB3 mov esp,ebp
      00422EB5 pop ebp
      00422EB6 retn 10

      F8单步跟出去:

      77E1A41D call dword ptr ss:[ebp+8] ;-----刚才所在的函数
      77E1A420 cmp dword ptr ss:[esp+4],DCBAABCD ;-----返回处
      77E1A428 je short user32.77E1A43B ;-----跳

      到此:

      77E1A43B add esp,8
      77E1A43E pop ebp
      77E1A43F retn 14

      继续跟出去,再返回几次,回到主进程领空:

      00419B4D push 0 ; /MsgFilterMax = 0
      00419B4F push 0 ; |MsgFilterMin = 0
      00419B51 push 0 ; |hWnd = NULL
      00419B53 lea edx,dword ptr ss:[ebp-1C] ; |
      00419B56 push edx ; |pMsg
      00419B57 call dword ptr ds:[42D1D0] ; GetMessageA
      00419B5D test eax,eax
      00419B5F je short .00419B77
      00419B61 lea eax,dword ptr ss:[ebp-1C]
      00419B64 push eax ; /pMsg
      00419B65 call dword ptr ds:[42D1D4] ; TranslateMessage
      00419B6B lea ecx,dword ptr ss:[ebp-1C]
      00419B6E push ecx ; /pMsg
      00419B6F call dword ptr ds:[42D1D8] ; DispatchMessageA
      00419B75 jmp short .00419B4D ;-----跳到上面

      花3秒钟看一下,上

相关TAG标签 入口
上一篇:菜鸟也搞系统自动开关机
下一篇:ftp使用经典
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站