吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6037|回复: 26
收起左侧

[CrackMe] 【D01E03】电子管 反破解教程之三 【用结构化异常SEH代替JMP指令】

[复制链接]
dianziguan 发表于 2013-7-15 21:33
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

本帖最后由 dianziguan 于 2013-7-18 21:19 编辑

用seh来修改eip
程序很简单,代码很少,破解时请不要用修改字符串的方式,这样不好玩。
完整源代码如下:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \MASM32\LIB\oleaut32.lib
include \MASM32\include\oleaut32.inc
DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
DlgName db "MyDialog",0
;AppName db "注册程序,(C)电子管 2012.07.15",0
SerialNumber1 db "12345678",0
regNumber1 dd 0,0
mesbok_1 db "哈哈哈哈",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
regbuffer1 db 512 dup(?)
err1 dd ?
ok1 dd ?
.const
IDC_EDIT2        equ 3800
IDC_EDIT3        equ 3801
IDC_BUTTON      equ 3001
IDC_EXIT        equ 3002
.code
_ErrHandler  proc C _lpExceptionRecord, _lpSEH, \
      _lpContext, _lpDispatchContext
    local @szBuffer[256]:byte

    pushad
    mov  esi, _lpExceptionRecord
    mov  edi, _lpContext
    assume esi:ptr EXCEPTION_RECORD, edi:ptr CONTEXT
    lea ebx,mesbok_1
                            mov eax,0e1b2a2d7h;注册
                            mov [ebx],eax
                            mov eax,0a6b9c9b3h;成功
                            mov [ebx+4],eax
                            mov eax,ok1
                            mov  [edi].regEip, eax
    assume esi:nothing, edi:nothing
    popad
    mov  eax, ExceptionContinueExecution
    ret

_ErrHandler  endp

start:
     invoke GetModuleHandle, NULL
mov    hInstance,eax
invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
     invoke SetDlgItemText,hWnd,IDC_EDIT2,ADDR SerialNumber1
      
.ELSEIF uMsg== WM_CLOSE
  invoke EndDialog, hWnd,NULL
.ELSEIF uMsg==WM_COMMAND
         
  mov edx,wParam
              mov eax,edx
   shr edx,16
   .if dx==BN_CLICKED
    .IF ax==IDC_BUTTON
                          assume fs:nothing
    push offset _ErrHandler
    push fs:[0]
    mov  fs:[0], esp
                             mov eax,offset _SafePlace
                             mov ok1,eax
                              invoke GetDlgItemText,hWnd,IDC_EDIT3,ADDR regbuffer1,512
                              push esi
                              mov esi,offset regbuffer1
                              cld
                              lodsd
                              sub eax,30303030h
                              push eax
                              pop edx
                              lodsd
                              sub eax,30303030h
                              add eax,edx
                              sub eax,08080808h
                              mov edx,0
                             cld
                            mov cx,ax
                            div cx
                            mov edi,offset mesbok_1
                            mov eax,0e1b2a2d7h;注册
                            stosd
                            mov eax,0dcb0a7cah; 失败
                            stosd
   
_SafePlace:
    invoke MessageBox, NULL, addr mesbok_1, addr mesbok_1, MB_OK
                 pop  fs:[0]
    pop  eax
  
                                             
                     
                      exit_1:  invoke EndDialog, hWnd,NULL
                        invoke ExitProcess,eax
                           
                           
                        .ELSEIF ax==IDC_EXIT
     invoke EndDialog, hWnd,NULL
    .ENDIF
   .ENDIF
              
.ELSE
  mov eax,FALSE
  ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
end start

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 1热心值 +1 收起 理由
小白菜 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

小白菜 发表于 2015-5-20 11:33
这个是被除数为0时,触发异常的  对吧。关键算法部分
00401107   .  2D 30303030   sub eax,0x30303030
0040110C   .  03C2          add eax,edx
0040110E   .  2D 08080808   sub eax,0x8080808
00401113   .  BA 00000000   mov edx,0x0
00401118   .  FC            cld
00401119   .  66:8BC8       mov cx,ax
0040111C   .  66:F7F1       div cx


只要满足cx== 0就可以了 这里反推注册码就很简单;了,还有一种爆破  就是将0040112F      AB            stos dword ptr es:[edi]这一句给nop掉
 楼主| dianziguan 发表于 2015-6-13 18:14
小白菜 发表于 2015-5-20 11:33
这个是被除数为0时,触发异常的  对吧。关键算法部分
00401107   .  2D 30303030   sub eax,0x30303030
0 ...

确实如此
头像被屏蔽
田田圏 发表于 2013-7-15 21:45
qiusuo 发表于 2013-7-15 21:52
不晓得什么是结构化异常
 楼主| dianziguan 发表于 2013-7-15 21:55
qiusuo 发表于 2013-7-15 21:52
不晓得什么是结构化异常

简单一点说,就是程序出错的时候自动转到错误处理程序去执行。
 楼主| dianziguan 发表于 2013-7-15 21:57
田田圏 发表于 2013-7-15 21:45
求教程  求回复教程- -  好小的文件 不是E的  不会破 - -

是用汇编语言写的小程序。很小,也很简单,语句精炼,没有垃圾,是学习od最好的标本。
SxAni丶 发表于 2013-7-15 22:09
本帖最后由 SxAni丶 于 2013-7-16 10:18 编辑

学到了一些知识...
小子2012 发表于 2013-7-15 22:12
00008888
 楼主| dianziguan 发表于 2013-7-15 22:19
小子2012 发表于 2013-7-15 22:12
00008888

祝贺你!看懂了算法。有好多个正确答案的。小程序的目的是演示用seh代替jmp
qiusuo 发表于 2013-7-15 22:42
dianziguan 发表于 2013-7-15 21:55
简单一点说,就是程序出错的时候自动转到错误处理程序去执行。

这个真不懂
不会用鼠标的人 发表于 2013-7-15 22:55
本帖最后由 不会用鼠标的人 于 2013-7-15 23:28 编辑

哈哈,哥们我来了。。虽然有点晚。。。
0040110E   .  2D 08080808   sub eax,0x8080808
00401113   .  BA 00000000   mov edx,0x0
00401118   .  FC            cld
00401119   .  66:8BC8       mov cx,ax
0040111C   .  66:F7F1       div cx
0040111F      BF 1A304000   mov edi,dzg03.0040301A                   ;  注册失败
00401124   .  B8 D7A2B2E1   mov eax,0xE1B2A2D7
00401129   .  AB            stos dword ptr es:[edi]
0040112A   .  B8 CAA7B0DC   mov eax,0xDCB0A7CA
0040112F   .  AB            stos dword ptr es:[edi]
是在这动手脚吧

码:88880000
爆破:   0040111F      BF 1A304000   mov edi,dzg03.0040301A     改为        0040111F    ^\E9 DCFEFFFF   jmp dzg03.00401000

我们可以知道,当注册码错误时,文中红色的代码会接着往下执行,若错误,则会到达上面00401000的“结构异常处理程序”,那我们就可以改为无条件跳转jmp。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-1 19:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表