从零开始学习破解注册码-数据操作-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
楼主你有才@!· 牛比啦,膜拜中 易语言,看不懂 看不懂似天书歐
页:
[1]