灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3213回复:0

初识逆向技术

楼主#
更多 发布于:2012-08-24 20:02


逆向是很让人陶醉的一种技术,相信很多朋友都和我一样,喜欢研究它。当然,这就需要有几件上手的工具,以方便对软件进行跟踪与察看、修改与编辑。虽然各类工具非常多,但我推荐一下组合:
OllyDbg—Windows下优秀的跟踪调试软件。即可用于跟踪,也可以轻松地修改软件
PEiD—性能不错的侦察软件。即可以用来查看软件编辑平台和侦查外壳,准备足够的插件还可以侦查软件的加密算法。
LordPE—PE文件查看与修改工具。条件不具备时你少不了它的帮助。
WinHex或UltraEdit—文本编辑工具。可任选一种或其它的,主要用于编辑一些文本类资源。
好,下面我们选定一个软件《WinPatrol v8.1.2.0》,看看我们能作些什么?

软件简单介绍
WinPatrol是网络安全工具,可以探测出蠕虫、间谍程序、木马等恶意的程序。界面如图1所示:



图1
软件除了可以查看各种可能出现的项目及其相关信息外,你也可以设置对某一个项目的监视,用以跟踪监视可疑的病毒与木马的运行情况。软件启动后在任务栏会出现一只黑色的小狗,时不时掉转头来,煞是可爱。
软件运行有三种状态。它们分别是:未注册状态、注册于PLUS状态和注册于Professional状态。其中注册于PLUS状态和注册于Professional状态的界面略有不同,如图2、3所示:




图2 注册于PLUS状态




图3 注册于Professional状态
关于PLUS的注册方式,网上有现成的注册机,这里就不多说了。现在我想注册于Professional状态,那么我们能作些什么呢?

问题分析
通过对软件的跟踪发现,软件的注册验证并不复杂。有关代码如下:
读取名称:
00408CF1  PUSH 40                                      ; /Count = 40 (64.)
00408CF3  PUSH WinPatro.004276E0                       ; |Buffer = WinPatro.004276E0
00408CF8  PUSH 432                                     ; |ControlID = 432 (1074.)
00408CFD  PUSH ESI                                     ; |hWnd
00408CFE  CALL EDI                                     ; GetDlgItemTextA
读取注册码:
00408D00  PUSH 20                                      ; /Count = 20 (32.)
00408D02  PUSH WinPatro.00427720                       ; |Buffer = WinPatro.00427720
00408D07  PUSH 430                                     ; |ControlID = 430 (1072.)
00408D0C  PUSH ESI                                     ; |hWnd
00408D0D  MOV EBX,EAX                                  ; |转移名称长度
00408D0F  CALL EDI                                     ; GetDlgItemTextA
判断:
00408D11  LEA EAX,Dword PTR DS:[EBX-1]                 ;  名称长度-1
00408D14  TEST EAX,EAX
00408D16  JLE SHORT WinPatro.00408D33
00408D18  JMP SHORT WinPatro.00408D20
00408D1A  LEA EBX,Dword PTR DS:[EBX]
00408D20  CMP BYTE PTR DS:[EAX+4276E0],20              ;  名称最后一位是空格么?
00408D27  JNZ SHORT WinPatro.00408D30
00408D29  DEC EAX
00408D2A  TEST EAX,EAX
00408D2C  JG SHORT WinPatro.00408D20
00408D2E  JMP SHORT WinPatro.00408D33
00408D30  LEA EBX,Dword PTR DS:[EAX+1]                 ;  还原名称长度
00408D33  MOVSX EAX,BYTE PTR DS:[427721]               ;  取出注册码第二位
00408D3A  ADD BL,40                                    ;  名称长度+0x40=注册码第二位
00408D3D  MOVZX EDX,BL
00408D40  CMP EAX,EDX                                  ;  比较
00408D42  JE SHORT WinPatro.00408D9B                   ;  相等则跳
00408D44  PUSH 200
00408D49  LEA ECX,Dword PTR SS:[ESP+D0]
00408D50  PUSH ECX
00408D51  PUSH 26C
00408D56  CALL WinPatro.0041A290                       ; 读取注册不成功消息
00408D5B  XOR EDX,EDX
00408D5D  MOV DX,word PTR DS:[42C100]
00408D64  ADD ESP,0C
00408D67  LEA EAX,Dword PTR SS:[ESP+CC]
注册不成功消息:
00408D6E  PUSH EDX                                     ; /LanguageID
00408D6F  PUSH 40040                                   ; |Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL|40000
00408D74  PUSH WinPatro.00427DC0             ;nb


喜欢0 评分0
游客

返回顶部