吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2869|回复: 2
收起左侧

[CrackMe] 【D01E04】电子管 反破解教程之四【隐藏API入口,Anti OD的API断点】

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

本帖最后由 dianziguan 于 2013-7-21 15:48 编辑


原帖子不知道怎么不见了,源代码如下:
.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
AppName db "注册程序,(C)电子管 2012.07.19",0
DlgName db "MyDialog",0
dllname1 db "user32.dll",0
dllname2 db "kernel32.dll",0
tDialogBoxParam db "DialogBoxParamA",0
tExitProcess db "ExitProcess",0
tEndDialog db "EndDialog",0
tGetDlgItemText db "GetDlgItemTextA",0
tGetModuleHandle db "GetModuleHandleA",0
tMessageBoxA db "MessageBoxA",0
tLoadLibrary db "LoadLibraryA",0
taGetProcAddress db "GetProcAddress",0
chck2 dd 363734a1h
.data?
hInstance HINSTANCE ?
err1 dd ?
ok1 dd ?
ok2 dd ?
mesbok_1 db 10 dup(?)
regbuffer1 db 512 dup(?)
aGetModuleHandle dd ?
aLoadLibrary dd ?
dllhnd1 dd ?
dllhnd2 dd ?
aDialogBoxParam dd ?
aGetDlgItemText dd ?
aEndDialog dd ?
aMessageBoxA dd ?
aExitProcess dd ?
aGetProcAddress dd ?
chck1 dd ?

.const
IDC_EDIT2        equ 3800
IDC_EDIT3        equ 3801
IDC_BUTTON      equ 3001
IDC_EXIT        equ 3002
.code
start:  ;LoadLibrary GetProcAddress
       mov aGetModuleHandle,GetModuleHandle
       push 0
       push  offset loc_1
       mov eax,aGetModuleHandle
       jmp eax   
     ;invoke GetModuleHandle, NULL
   
loc_1:      
      
mov    hInstance,eax
       mov aGetModuleHandle,GetModuleHandle
       push offset dllname2
       push  offset loc_2
       mov eax,aGetModuleHandle
       jmp eax   
     ;invoke GetModuleHandle, NULL
   
   
loc_2:      
      
mov    dllhnd2,eax
       mov aGetProcAddress,GetProcAddress
      
       push offset tLoadLibrary
       push dllhnd2
       push offset loc_4
       mov eax,aGetProcAddress
       jmp eax
        ;invoke  GetProcAddress,dllhnd2,addr tLoadLibrary
loc_4: add eax,2
       mov aLoadLibrary,eax
      
       push offset taGetProcAddress
       push dllhnd2
       mov eax,aGetProcAddress
       call eax
      
loc_6:
       add eax,2
       mov aGetProcAddress,eax
        
           
       push offset dllname1
       mov eax,aLoadLibrary
       call eax
       ;invoke LoadLibrary,addr dllname1
       mov dllhnd1,eax
       push offset tDialogBoxParam
       push dllhnd1
       call aGetProcAddress
       ;invoke  GetProcAddress,dllhnd1,addr tDialogBoxParam
       add eax,2
       mov aDialogBoxParam,eax
       push offset tEndDialog
       push dllhnd1
       mov eax, aGetProcAddress
       call eax
       add eax,2
       ;invoke GetProcAddress,dllhnd1,addr tEndDialog
       mov aEndDialog,eax
       push offset tGetDlgItemText
       push dllhnd1
       mov eax,aGetProcAddress
       call eax
       ;invoke GetProcAddress,dllhnd1,addr tGetDlgItemText
       inc eax
       add eax,1
       mov aGetDlgItemText,eax
       push offset tMessageBoxA
       push dllhnd1
       mov eax,aGetProcAddress
       call eax
       ;invoke GetProcAddress,dllhnd1,addr tMessageBoxA
       add eax,1
       inc eax
       mov aMessageBoxA,eax
       push offset tExitProcess
       push dllhnd2
       mov eax, aGetProcAddress
       call eax
       ;invoke GetProcAddress,dllhnd2,addr tExitProcess
       add eax,2
       mov aExitProcess,eax
       push 0
       push offset DlgProc
       push 0
       push offset DlgName
       push hInstance
       mov eax,aDialogBoxParam
       push offset loc_3
       jmp eax
;invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL
loc_3: ret;invoke ExitProcess,eax
DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
    ; invoke SetDlgItemText,hWnd,IDC_EDIT2,ADDR AppName
        cld
        mov esi,offset start
        mov ecx,offset f_1
        sub ecx,esi
        mov edx,0
        mov eax,0
  lloc_1:lodsb
       add edx,eax
       loop lloc_1
       add edx,36363636h
       mov chck1,edx   ;检查和
       nop
       nop     
      
.ELSEIF uMsg== WM_CLOSE
              push 0
              push  hWnd
              mov eax,aEndDialog
              call eax
  ;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
                              mov edi,chck1
                              mov eax ,offset ok_1
                              mov ok1,eax
                              mov eax ,offset ok_2
                              mov ok2,eax
                              mov eax,offset err_1
                              mov err1,eax
                              ;invoke GetDlgItemText,hWnd,IDC_EDIT3,ADDR regbuffer1,512
                              
                              push 512
                              push offset regbuffer1
                              push IDC_EDIT3
                              push hWnd
                              push offset lloc_3
                              mov eax,aGetDlgItemText
                              nop
                              jmp eax   
                  lloc_3:     push esi
                              mov esi,offset regbuffer1
                              cld
                              lodsd
                              sub eax,30303030h
                              push eax
                              pop edx
                              lodsd
                              sub eax,30303030h
                              add eax,edx
                              sub eax,09090909h
                              pushfd
                              pop eax
                              and eax,40h
                              shr eax,4
                              mov edx,offset err1
                              add eax,edx
                              mov eax, [eax]
                              jmp eax
                                             
                       err_1:
                     
                        pop esi   
                       ;invoke MessageBoxA,NULL,ADDR mesberr_1,ADDR AppName,MB_OK
                        
                      exit_1:  
                         push 0
                         push  hWnd
                         mov eax,aEndDialog
                         call eax
                      ;invoke EndDialog, hWnd,NULL
                        push 0
                        
                        
                        mov eax,aExitProcess
                        jmp eax
                       
                        ;invoke ExitProcess,eax
                        
                       ok_1:
                          ;pop esi
                          ;jmp ok_2
                          mov eax,chck2
                          ;cmp eax,edi
                          sub eax,edi
                              pushfd
                              pop eax
                              and eax,40h
                              shr eax,3
                              mov edx,offset err1
                              add eax,edx
                              mov eax, [eax]
                              jmp eax
                      ok_2:  pop esi
                             mov edi,offset mesbok_1
                             mov eax,0e1b2a2d7h;'注册'
                             stosd
                             mov eax,0a6b9c9b3h;'成功'
                             stosd
                          ;invoke MessageBox,NULL,ADDR mesbok_1,ADDR AppName,MB_OK
                          push MB_OK
                          push offset mesbok_1
                           push offset mesbok_1
                           push 0
                           mov eax,offset exit_1
                           push eax
                           mov eax, aMessageBoxA
                           jmp eax
                          jmp exit_1      
                           
                        .ELSEIF ax==IDC_EXIT
                         push 0
                         push  hWnd
                         mov eax,aEndDialog
                         call eax
     ;invoke EndDialog, hWnd,NULL
    .ENDIF
   .ENDIF
              
.ELSE
  mov eax,FALSE
  ret
.ENDIF
mov eax,TRUE
ret
DlgProc endp
f_1:
end start

本帖子中包含更多资源

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

x

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

cxihdx 发表于 2013-7-21 15:44
虽然没看明白,但也支持下
 楼主| dianziguan 发表于 2013-7-21 15:49
cxihdx 发表于 2013-7-21 15:44
虽然没看明白,但也支持下

谢谢支持,汇编是解密的基础,玩破解多了,汇编也就看懂了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 00:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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