lxyg06 发表于 2017-5-25 11:11

从零开始学习破解注册码-数据操作-1

本帖最后由 lxyg06 于 2017-5-25 11:32 编辑

注册码,一般都会进行数据的处理,比如取注册码第几位和某一个数进行加 减 或者替换某一个位的数字等,这就要用到汇编里面的mov sub add等这些命令了

mov指令的几种形式:mov寄存器、数据               
    mov ax,123mov寄存器、寄存器               
mov bx,ax mov寄存器、内存单元               
mov ax,mov内存单元、寄存器                  
mov ,ax mov段寄存器、寄存器                  
mov ds,axadd和sub指令和mov一样,都有2个操作对象。sub和add类似,不过是相减,
sub ax,10                给ax减10,之后的结果赋值给ax
sub ax,bx                语意是ax = bx - ax
sub ax,                将偏移地址为0的内存单元 - ax 再赋值给ax
一个简单的注册码验证程序,很简单的 取注册码中5这个字符,加上3 减去3 看看和之后的第一和第二是不是相等

汇编后的结果在整理
易语言汇编后变很复杂,还在整理中,为了不影响用c写了一个一样的程序


汇编后

00401323|.C785 70FFFFFF>mov ,-0x1                      ; |
0040132D|.8D85 78FFFFFF lea eax,                     ; |%s
00401333|?894424 04   mov dword ptr ss:,eax         ;kernel32.BaseThreadInitThunk
00401337|?C70424 003040>mov dword ptr ss:,未命名1.00403000   ;ASCII "%s"
0040133E|?E8 7D060000   call <jmp.&msvcrt.scanf>
00401343|.C785 6CFFFFFF>mov ,0x7B
0040134D|.83BD 6CFFFFFF>cmp ,0x5
00401354|.0F8E D0000000 jle 未命名1.0040142A
0040135A|.C785 68FFFFFF>mov ,0x0
00401364|>8B85 68FFFFFF /mov eax,
0040136A|.3B85 6CFFFFFF |cmp eax,
00401370|.7D 29         |jge short 未命名1.0040139B
00401372|.8D45 F8       |lea eax,
00401375|.0385 68FFFFFF |add eax,
0040137B|.83C0 80       |add eax,-0x80
0040137E|.8038 35       |cmp byte ptr ds:,0x35
00401381|.75 0E         |jnz short 未命名1.00401391
00401383|.8B85 68FFFFFF |mov eax,
00401389|.8985 70FFFFFF |mov ,eax                      ;kernel32.BaseThreadInitThunk
0040138F|.EB 0A         |jmp short 未命名1.0040139B
00401391|>8D85 68FFFFFF |lea eax,
00401397|.FF00          |inc dword ptr ds:
00401399|.^ EB C9         \jmp short 未命名1.00401364
0040139B|>8B85 70FFFFFF mov eax,                     ; |
004013A1|.8B95 6CFFFFFF mov edx,                     ; |
004013A7|.29C2          sub edx,eax                              ; |kernel32.BaseThreadInitThunk
004013A9|.89D0          mov eax,edx                              ; |未命名1.<ModuleEntryPoint>
004013AB|.83F8 02       cmp eax,0x2                              ; |
004013AE|.7E 7A         jle short 未命名1.0040142A                  ; |
004013B0|.8D45 F8       lea eax,                        ; |
004013B3|.0385 70FFFFFF add eax,                     ; |
004013B9|.83C0 80       add eax,-0x80                            ; |
004013BC|.0FB600      movzx eax,byte ptr ds:            ; |
004013BF|.04 03         add al,0x3                               ; |
004013C1|.8885 77FFFFFF mov byte ptr ss:,al            ; |
004013C7|.8D45 F8       lea eax,                        ; |
004013CA|.0385 70FFFFFF add eax,                     ; |
004013D0|.83C0 80       add eax,-0x80                            ; |
004013D3|.0FB600      movzx eax,byte ptr ds:            ; |
004013D6|.2C 03         sub al,0x3                               ; |
004013D8|.8885 76FFFFFF mov byte ptr ss:,al            ; |
004013DE|.0FBE95 77FFFF>movsx edx,byte ptr ss:         ; |
004013E5|.8D45 F8       lea eax,                        ; |
004013E8|.0385 70FFFFFF add eax,                     ; |
004013EE|.83E8 7F       sub eax,0x7F                           ; |
004013F1|.0FBE00      movsx eax,byte ptr ds:            ; |
004013F4|.39C2          cmp edx,eax                              ; |kernel32.BaseThreadInitThunk
004013F6|.75 32         jnz short 未命名1.0040142A                  ; |
004013F8|.0FBE95 76FFFF>movsx edx,byte ptr ss:         ; |
004013FF|.8D45 F8       lea eax,                        ; |
00401402|.0385 70FFFFFF add eax,                     ; |
00401408|.83E8 7E       sub eax,0x7E                           ; |
0040140B|.0FBE00      movsx eax,byte ptr ds:            ; |
0040140E|.39C2          cmp edx,eax                              ; |kernel32.BaseThreadInitThunk
00401410|.75 18         jnz short 未命名1.0040142A                  ; |
00401412|.C70424 033040>mov dword ptr ss:,未命名1.00403003   ; |注册成功
00401419|.E8 9A050000   call <jmp.&msvcrt.printf>                ; \printf
0040141E|.C785 64FFFFFF>mov ,0x0
00401428|.EB 16         jmp short 未命名1.00401440
0040142A|>C70424 0C3040>mov dword ptr ss:,未命名1.0040300C   ; |注册失败
00401431|.E8 82050000   call <jmp.&msvcrt.printf>                ; \printf
00401436|.C785 64FFFFFF>mov ,0x0
00401440|>8B85 64FFFFFF mov eax,
00401446|.C9            leave
00401447\.C3            retn

加减

sub al,0x3减去3
add al,0x3加上3

赋值

mov ,-0x1赋-1




wangp-3366 发表于 2017-5-25 11:18

楼主你有才@!·

pwp 发表于 2017-5-25 12:02

牛比啦,膜拜中

longmarchw 发表于 2017-5-25 13:31

易语言,看不懂

qazx5555 发表于 2017-5-25 14:55

看不懂似天书歐
页: [1]
查看完整版本: 从零开始学习破解注册码-数据操作-1