能力值:
( LV2,RANK:10 )
|
-
-
2 楼
0040197B . 84C0 test al,al
注册的时候在这地址下断就能在堆栈看到注册码了饿
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
OD里都查不到字符串你怎么知道在0040197B . 84C0 test al,al下断啊,晕
|
能力值:
( LV13,RANK:260 )
|
-
-
8 楼
你的字符穿 怎么创建的 。。应该是没有注意。。。其实 跟到里面去 看到md5 我就知道 行为在dll 中实现注册的全过程。。。
好好 处理一下字符串 ,在弄出来 其实 还是不错的。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
嗯,我明白。
我是搞GPS卫星定位的。软件不希望轻易破解,这个是注册的台数限制,我想到的只有把字符串隐藏,进行MD5。但是还是被你破了。呵呵。
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
软件的MD5算法好像是把四个常数给修改了。
四个常数为:
1000F1DA C701 01244567 MOV DWORD PTR DS:[ECX],67452401
1000F1E0 C741 04 89ABC31>MOV DWORD PTR DS:[ECX+4],10C3AB89
1000F1E7 C741 08 FE6CBA9>MOV DWORD PTR DS:[ECX+8],98BA6CFE
1000F1EE C741 0C 7621351>MOV DWORD PTR DS:[ECX+C],10352176
注册算法是:将系统唯一识别码进行几次符点运算。我的识别码为118016855。
然后通过4次算法,得到注册码的4部分。每次算4位,(这部分没仔细看)。
0012EE34 003F4B40 ASCII "TOEV"
0012EE38 003F4F88 ASCII "GHJF"
0012EE3C 003F5678 ASCII "WJRA"
0012EE40 003F7710 ASCII "XEQV"
EAX 003F79A0 ASCII "TOEVGHJFWJRAXEQV" 记为s2
仔细观察:
数据窗口。就看到了某些地方了。我输入的假码是:12345678ABCDEFGH,算完第一步我的1234就变成真码TOEV了
MD5'(输入的16位假码)==MD5'(s2)
PS:感觉将两者先大写再比较,这步有点啰嗦了,完全没有意义。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
10005973 50 PUSH EAX
10005974 50 PUSH EAX
10005975 8D5424 28 LEA EDX,DWORD PTR SS:[ESP+28]
10005979 52 PUSH EDX
1000597A 6A 0C PUSH 0C
1000597C 50 PUSH EAX
1000597D 68 681A0210 PUSH OpExport.10021A68 ; ASCII "c:\"
10005982 FF15 74100210 CALL DWORD PTR DS:[<&KERNEL32.GetVolumeInformationA>] ; kernel32.GetVolumeInformationA
10005988 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18]
1000598C 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]
10005990 51 PUSH ECX
10005991 35 10270000 XOR EAX,2710
10005996 68 10270000 PUSH 2710
1000599B 50 PUSH EAX
1000599C 894424 24 MOV DWORD PTR SS:[ESP+24],EAX
100059A0 E8 4BDEFFFF CALL OpExport.100037F0
100037F0 83EC 18 SUB ESP,18
100037F3 57 PUSH EDI
100037F4 8B7C24 28 MOV EDI,DWORD PTR SS:[ESP+28]
100037F8 85FF TEST EDI,EDI
100037FA 75 07 JNZ SHORT OpExport.10003803
100037FC 32C0 XOR AL,AL
100037FE 5F POP EDI
100037FF 83C4 18 ADD ESP,18
10003802 C3 RETN
10003803 53 PUSH EBX
10003804 55 PUSH EBP
10003805 56 PUSH ESI
10003806 8BF7 MOV ESI,EDI
10003808 BB 04000000 MOV EBX,4
1000380D 8D49 00 LEA ECX,DWORD PTR DS:[ECX]
10003810 8BCE MOV ECX,ESI
10003812 FF15 C0110210 CALL DWORD PTR DS:[<&MFC71.#2131>] ; MFC71.7C173133
10003818 83C6 04 ADD ESI,4
1000381B 4B DEC EBX
1000381C ^ 75 F2 JNZ SHORT OpExport.10003810
1000381E 8B4C24 2C MOV ECX,DWORD PTR SS:[ESP+2C]
10003822 8BC1 MOV EAX,ECX
10003824 0FAFC1 IMUL EAX,ECX
10003827 8BD0 MOV EDX,EAX
10003829 0FAFD0 IMUL EDX,EAX
1000382C 85C9 TEST ECX,ECX
1000382E 8D4424 34 LEA EAX,DWORD PTR SS:[ESP+34]
10003832 895424 18 MOV DWORD PTR SS:[ESP+18],EDX
10003836 50 PUSH EAX
10003837 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14]
1000383B 52 PUSH EDX
1000383C 894C24 1C MOV DWORD PTR SS:[ESP+1C],ECX
10003840 6A 0B PUSH 0B
10003842 DB4424 20 FILD DWORD PTR SS:[ESP+20]
10003846 7D 06 JGE SHORT OpExport.1000384E
10003848 DC05 28180210 FADD QWORD PTR DS:[10021828]
1000384E D9FA FSQRT
10003850 8B35 7C130210 MOV ESI,DWORD PTR DS:[<&MSVCR71._ecvt>] ; MSVCR71._ecvt
10003856 83EC 08 SUB ESP,8
10003859 DC0D 20180210 FMUL QWORD PTR DS:[10021820]
1000385F DC05 18180210 FADD QWORD PTR DS:[10021818]
10003865 DD1C24 FSTP QWORD PTR SS:[ESP]
10003868 FFD6 CALL ESI
1000386A 8B1D 80130210 MOV EBX,DWORD PTR DS:[<&MSVCR71._atoi64>] ; MSVCR71._atoi64
10003870 50 PUSH EAX
10003871 FFD3 CALL EBX
10003873 83C4 18 ADD ESP,18
10003876 85C0 TEST EAX,EAX
10003878 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
1000387C 51 PUSH ECX
1000387D 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14]
10003881 52 PUSH EDX
10003882 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
10003886 DB4424 1C FILD DWORD PTR SS:[ESP+1C]
1000388A 894424 24 MOV DWORD PTR SS:[ESP+24],EAX
1000388E 6A 0B PUSH 0B
10003890 7D 06 JGE SHORT OpExport.10003898
10003892 DC05 28180210 FADD QWORD PTR DS:[10021828]
10003898 D9FA FSQRT
1000389A 83EC 08 SUB ESP,8
1000389D DC0D 20180210 FMUL QWORD PTR DS:[10021820]
100038A3 DC05 18180210 FADD QWORD PTR DS:[10021818]
100038A9 DD1C24 FSTP QWORD PTR SS:[ESP]
100038AC FFD6 CALL ESI
100038AE 50 PUSH EAX
100038AF FFD3 CALL EBX
100038B1 83C4 18 ADD ESP,18
100038B4 85C0 TEST EAX,EAX
100038B6 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
100038BA 51 PUSH ECX
100038BB 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14]
100038BF 52 PUSH EDX
100038C0 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
100038C4 DB4424 1C FILD DWORD PTR SS:[ESP+1C]
100038C8 894424 28 MOV DWORD PTR SS:[ESP+28],EAX
100038CC 6A 0B PUSH 0B
100038CE 7D 06 JGE SHORT OpExport.100038D6
100038D0 DC05 28180210 FADD QWORD PTR DS:[10021828]
100038D6 D9FA FSQRT
100038D8 83EC 08 SUB ESP,8
100038DB DC0D 20180210 FMUL QWORD PTR DS:[10021820]
100038E1 DC05 18180210 FADD QWORD PTR DS:[10021818]
100038E7 DD1C24 FSTP QWORD PTR SS:[ESP]
100038EA FFD6 CALL ESI
100038EC 50 PUSH EAX
100038ED FFD3 CALL EBX
100038EF 8D6C24 30 LEA EBP,DWORD PTR SS:[ESP+30]
100038F3 83C4 18 ADD ESP,18
100038F6 894424 24 MOV DWORD PTR SS:[ESP+24],EAX
100038FA 2BEF SUB EBP,EDI
100038FC C74424 14 040000>MOV DWORD PTR SS:[ESP+14],4
10003904 8B1C2F MOV EBX,DWORD PTR DS:[EDI+EBP]
10003907 33F6 XOR ESI,ESI
10003909 8DA424 00000000 LEA ESP,DWORD PTR SS:[ESP]
10003910 8BCE MOV ECX,ESI
10003912 B8 FF000000 MOV EAX,0FF
10003917 D3E0 SHL EAX,CL
10003919 33D2 XOR EDX,EDX
1000391B 23C3 AND EAX,EBX
1000391D D3E8 SHR EAX,CL
1000391F B9 1A000000 MOV ECX,1A
10003924 F7F1 DIV ECX
10003926 8BCF MOV ECX,EDI
10003928 80C2 41 ADD DL,41
1000392B 52 PUSH EDX
1000392C FF15 84110210 CALL DWORD PTR DS:[<&MFC71.#2902>] ; MFC71.7C146AB0
10003932 50 PUSH EAX
10003933 8BCF MOV ECX,EDI
10003935 FF15 BC110210 CALL DWORD PTR DS:[<&MFC71.#3849>] ; MFC71.7C189C8A
1000393B 83C6 08 ADD ESI,8
1000393E 83FE 20 CMP ESI,20
10003941 ^ 7C CD JL SHORT OpExport.10003910
10003943 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
10003947 83C7 04 ADD EDI,4
1000394A 48 DEC EAX
1000394B 894424 14 MOV DWORD PTR SS:[ESP+14],EAX
1000394F ^ 75 B3 JNZ SHORT OpExport.10003904
10003951 5E POP ESI
10003952 5D POP EBP
10003953 5B POP EBX
10003954 B0 01 MOV AL,1
10003956 5F POP EDI
10003957 83C4 18 ADD ESP,18
1000395A C3 RETN
加油。。。
|
能力值:
( LV3,RANK:20 )
|
-
-
14 楼
软件不断使用ecvt和atoi64两个函数就换浮点。。。最终生成key的算法在这里。
edx的ascii码就是每一次循环得到的一位key 10003904 8B1C2F MOV EBX,DWORD PTR DS:[EDI+EBP] ; 这是重点
10003907 33F6 XOR ESI,ESI
10003909 8DA424 00000000 LEA ESP,DWORD PTR SS:[ESP]
10003910 8BCE MOV ECX,ESI
10003912 B8 FF000000 MOV EAX,0FF
10003917 D3E0 SHL EAX,CL
10003919 33D2 XOR EDX,EDX
1000391B 23C3 AND EAX,EBX
1000391D D3E8 SHR EAX,CL
1000391F B9 1A000000 MOV ECX,1A
10003924 F7F1 DIV ECX
10003926 8BCF MOV ECX,EDI
10003928 80C2 41 ADD DL,41
1000392B 52 PUSH EDX ; 1111
1000392C FF15 84110210 CALL DWORD PTR DS:[<&MFC71.#2902>] ; MFC71.7C146AB0
10003932 50 PUSH EAX
10003933 8BCF MOV ECX,EDI
10003935 FF15 BC110210 CALL DWORD PTR DS:[<&MFC71.#3849>] ; 222
1000393B 83C6 08 ADD ESI,8
1000393E 83FE 20 CMP ESI,20 ; 显然循环4次,共计算4位注册码
10003941 ^ 7C CD JL SHORT 10003910
10003943 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
10003947 83C7 04 ADD EDI,4
1000394A 48 DEC EAX
1000394B 894424 14 MOV DWORD PTR SS:[ESP+14],EAX
1000394F ^ 75 B3 JNZ SHORT 10003904
10003951 5E POP ESI
10003952 5D POP EBP
10003953 5B POP EBX
10003954 B0 01 MOV AL,1
10003956 5F POP EDI
10003957 83C4 18 ADD ESP,18
1000395A C3 RETN
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
我现在感觉到很垃圾了。呵呵。直接打开OD加载了那个EXE。shift+f7,f8,f9,忽略异常,就可以查到字符串了。直接爆破掉,唉,我得改改,完后再放出来。大家再看看吧。
je short 004019B3
这里直接修改后成功。看来我得重新修改代码了
|