⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 具体做法.txt

📁 一个简单的加壳CrackMe的破解,体现了破解一般做法,查询加壳类型,脱壳,分析,写出注册机.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
0040120E    E8 05010000     CALL <JMP.&user32.wsprintfA>
00401213    83C4 0C         ADD ESP,0C
00401216    68 20334000     PUSH unpacked.00403320                   ; ASCII "tsrh-2013-"
0040121B    E8 34010000     CALL <JMP.&kernel32.lstrlen>
00401220    8B3D 14354000   MOV EDI,DWORD PTR DS:[403514]            ;edi = 用户名长度
00401226    BE 01000000     MOV ESI,1                                ;esi = 1
0040122B    8BC8            MOV ECX,EAX                              ; ecx = "tsrh-2013-"长度
0040122D    C3              RETN
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;过程2,计算注册号
0040122E    56              PUSH ESI
0040122F    68 20334000     PUSH unpacked.00403320                   ; ASCII "tsrh-2013-"
00401234    E8 1B010000     CALL <JMP.&kernel32.lstrlen>             ;获取字符串"tsrh-2013-"长度
00401239    8B3D 14354000   MOV EDI,DWORD PTR DS:[403514]            ;EDI = 用户名长度
0040123F    BE 01000000     MOV ESI,1                                ;esi = 1
00401244    8BC8            MOV ECX,EAX                              ;ecx = 字符串"tsrh-2013-"长度
;;;;;;;;;;;;L5:
00401246    B8 B0344000     MOV EAX,unpacked.004034B0                ; ASCII "bj20080808"
0040124B    0FB64406 FF     MOVZX EAX,BYTE PTR DS:[ESI+EAX-1]        ; eax = "bj20080808"第一个字节
00401250    04 0C           ADD AL,0C                                ; al = al + 0x0C
00401252    0FB6D0          MOVZX EDX,AL                             ; edx = al
00401255    83EA 11         SUB EDX,11                               ; edx = edx - 0x11
00401258    03D0            ADD EDX,EAX                              ; edx = edx + eax
0040125A    2BD1            SUB EDX,ECX                              ; edx = edx - ecx
0040125C    33C2            XOR EAX,EDX                              ; eax = eax ^ edx
0040125E    50              PUSH EAX                                 ; 存eax
0040125F    68 18354000     PUSH unpacked.00403518                   ; ASCII "%X"
00401264    8D81 20334000   LEA EAX,DWORD PTR DS:[ECX+403320]
0040126A    50              PUSH EAX
0040126B    E8 A8000000     CALL <JMP.&user32.wsprintfA>
00401270    83C4 0C         ADD ESP,0C
00401273    68 20334000     PUSH unpacked.00403320                   ; ASCII "tsrh-2013-"
00401278    E8 D7000000     CALL <JMP.&kernel32.lstrlen>
0040127D    8BC8            MOV ECX,EAX                              ; ecx = 字符串
0040127F    46              INC ESI                                  ; esi = esi + 1
00401280    4F              DEC EDI                                  ; edi = 用户名长度-1
00401281  ^ 75 C3           JNZ SHORT unpacked.00401246              ; jmp L5
00401283    33C0            XOR EAX,EAX                              ; eax = 0
00401285    5E              POP ESI                                  ; esi
00401286    C3              RETN
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;过程3,计算注册号
00401287    53              PUSH EBX
00401288    BE 01000000     MOV ESI,1
;;;;;;;;;;;;L8:
0040128D    B8 B0344000     MOV EAX,unpacked.004034B0                ; ASCII "bj20080808"
00401292    0FB64406 FF     MOVZX EAX,BYTE PTR DS:[ESI+EAX-1]        ; 获取一个字符>>eax
00401297    85C0            TEST EAX,EAX                             ; 如果为结束符
00401299    74 34           JE SHORT unpacked.004012CF               ; 跳出循环
0040129B    40              INC EAX                                  ; eax = eax + 1
0040129C    BA 20334000     MOV EDX,unpacked.00403320                ; ASCII "tsrh-2013-"
004012A1    0FB65416 0B     MOVZX EDX,BYTE PTR DS:[ESI+EDX+B]        ; edx = "tsrh-2013-"后面的字符
004012A6    33C2            XOR EAX,EDX                              ; eax = eax ^ edx
;;;;;;;;;;;L7
004012A8    83F8 41         CMP EAX,41                               ; 判断eax与0x41
004012AB    7D 05           JGE SHORT unpacked.004012B2              ; 如果eax >= 0x41,跳L6
004012AD    83C0 08         ADD EAX,8                                ; 否则eax = eax + 8
004012B0  ^ EB F6           JMP SHORT unpacked.004012A8              ; 跳L7
;;;;;;;;;;;L6
004012B2    83F8 5A         CMP EAX,5A                               ; 判断eax与0x5A
004012B5    7E 05           JLE SHORT unpacked.004012BC              ; 如果eax <= 0x5A
004012B7    83E8 03         SUB EAX,3                                ; eax = eax - 3
004012BA  ^ EB F6           JMP SHORT unpacked.004012B2              ; 跳 L6
004012BC    83C6 09         ADD ESI,9                                ; esi = esi + 9
004012BF    BB 20334000     MOV EBX,unpacked.00403320                ; ASCII "tsrh-2013-"
004012C4    89041E          MOV DWORD PTR DS:[ESI+EBX],EAX           ; 
004012C7    83EE 08         SUB ESI,8
004012CA    83FE 10         CMP ESI,10
004012CD  ^ 75 BE           JNZ SHORT unpacked.0040128D              ;不等于就继续循环,跳L8
004012CF    33C0            XOR EAX,EAX
004012D1    5B              POP EBX
;=====================================================================到此处注册号已经计算好
;=====================================================================注册机可以写了,呵呵..
004012D2    E8 01000000     CALL unpacked.004012D8                    ; call过程4
004012D7    C3              RETN
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 过程4,比较注册号
004012D8    53              PUSH EBX
004012D9    33F6            XOR ESI,ESI
004012DB    BB 90314000     MOV EBX,unpacked.00403190                ; ASCII "2008"
004012E0    8B1C1E          MOV EBX,DWORD PTR DS:[ESI+EBX]           ; 获取输入的序列号
004012E3    B8 20334000     MOV EAX,unpacked.00403320                ; ASCII "tsrh-2013-"
004012E8    8B0406          MOV EAX,DWORD PTR DS:[ESI+EAX]           ; 获取计算好的序列号
004012EB    84C0            TEST AL,AL                               ; 判断是否结束
004012ED    74 09           JE SHORT unpacked.004012F8               ; 如果序列号结束,跳出循环
004012EF    46              INC ESI                                  ; 获取下一字符及其连续三个字符
004012F0    3BD8            CMP EBX,EAX                              ; 比较序列号
004012F2  ^ 74 E7           JE SHORT unpacked.004012DB               ; 相等继续
004012F4    33C0            XOR EAX,EAX                              ; 否则EAX = 0
004012F6    EB 01           JMP SHORT unpacked.004012F9              ; 跳出
004012F8    40              INC EAX                                  ; 如果序列号跟计算出的序列号相等,eax = 1
004012F9    5B              POP EBX                                  ; eax==0 失败,eax==1 成功
004012FA    C3              RETN                                     ; 返回
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;过程5,此过程用于修改显示信息
004012FB    50              PUSH EAX
004012FC    B9 00304000     MOV ECX,unpacked.00403000                ; ASCII "Invalid Serial!"
00401301    0FB610          MOVZX EDX,BYTE PTR DS:[EAX]
00401304    85D2            TEST EDX,EDX
00401306    74 09           JE SHORT unpacked.00401311
00401308    83C2 10         ADD EDX,10
0040130B    8811            MOV BYTE PTR DS:[ECX],DL
0040130D    40              INC EAX
0040130E    41              INC ECX
0040130F  ^ EB F0           JMP SHORT unpacked.00401301
00401311    33C0            XOR EAX,EAX
00401313    8901            MOV DWORD PTR DS:[ECX],EAX
00401315    58              POP EAX
00401316    C3              RETN

00401317    CC              INT3
00401318  - FF25 34204000   JMP DWORD PTR DS:[<&user32.wsprintfA>]   ; USER32.wsprintfA
0040131E  - FF25 30204000   JMP DWORD PTR DS:[<&user32.DialogBoxPara>; USER32.DialogBoxParamA
00401324  - FF25 2C204000   JMP DWORD PTR DS:[<&user32.EndDialog>]   ; USER32.EndDialog
0040132A  - FF25 28204000   JMP DWORD PTR DS:[<&user32.GetDlgItemTex>; USER32.GetDlgItemTextA
00401330  - FF25 24204000   JMP DWORD PTR DS:[<&user32.MessageBoxA>] ; USER32.MessageBoxA
00401336  - FF25 20204000   JMP DWORD PTR DS:[<&user32.SetDlgItemTex>; USER32.SetDlgItemTextA
0040133C  - FF25 10204000   JMP DWORD PTR DS:[<&kernel32.CreateMutex>; kernel32.CreateMutexA
00401342  - FF25 00204000   JMP DWORD PTR DS:[<&kernel32.ExitProcess>; kernel32.ExitProcess
00401348  - FF25 0C204000   JMP DWORD PTR DS:[<&kernel32.GetLastErro>; ntdll.RtlGetLastWin32Error
0040134E  - FF25 08204000   JMP DWORD PTR DS:[<&kernel32.GetModuleHa>; kernel32.GetModuleHandleA
00401354  - FF25 04204000   JMP DWORD PTR DS:[<&kernel32.lstrlen>]   ; kernel32.lstrlenA
0040135A  - FF25 18204000   JMP DWORD PTR DS:[<&shell32.ShellExecute>; shell32.ShellExecuteA

跟踪所得:
用户名: bj20080808
注册码: tsrh-2013-AYCAAAAAAA

三.写注册机
见KeyGen代码

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -