usbKiller 注册算法纯技术分析
本文只做技术学习研究参考使用~
PEID检查无壳,Borland Delphi 6.0 - 7.0,OD载入,F9运行,注册,输入假码:0123456789,确定,弹错误信息,F12暂停,显示调用
调用堆栈 ,项目 14
地址=0012F93C 堆栈=004937E7 函数例程 / 参数=? <jmp.&user32.MessageBoxA> 调用来自=USBKille.004937E2 //左键双击或Enter键跟随
004937E2 |. E8 714CF7FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA ;来到这里
004937E7 |. 8945 F8 mov [local.2],eax
004937EA |. 33C0 xor eax,eax
004937EC |. 5A pop edx
向上查看,找到段首F2下断:
004936FC /$ 55 push ebp ;F2下断
004936FD |. 8BEC mov ebp,esp
004936FF |. 83C4 AC add esp,-54
00493702 |. 53 push ebx
00493703 |. 56 push esi
F9运行,再次点击注册,断在 004936FC /$ 55 push ebp 这里,F2取消断点,看堆栈窗口
0012F968 004DE79B 返回到 USBKille.004DE79B 来自 USBKille.004DE460 ;在这里右键“在反汇编窗口中跟随”
来到这里:
004DE79B |. 33C0 xor eax,eax
向上查看,找到段首F2下断:
004DE76C /$ 55 push ebp ;F2下断
004DE76D |. 8BEC mov ebp,esp
004DE76F |. 6A 00 push 0
F9运行,再次点击注册,断在 004DE76C /$ 55 push ebp 这里,F2取消断点,看堆栈窗口
0012F988 004DE6E6 返回到 USBKille.004DE6E6 来自 USBKille.004DE76C ;在这里右键“在反汇编窗口中跟随”
来到这里:
004DE6E6 |. 8B45 F0 mov eax,[local.4]
向上查看,找到段首F2下断:
004DE6A4 /$ 55 push ebp ;F2下断
004DE6A5 |. 8BEC mov ebp,esp
004DE6A7 |. 33C9 xor ecx,ecx
004DE6A9 |. 51 push ecx
004DE6AA |. 51 push ecx
004DE6AB |. 51 push ecx
F9运行,再次点击注册,断在 004DE6A4 /$ 55 push ebp 这里,F2取消断点,看堆栈窗口
0012F9C4 0056930E 返回到 USBKille.0056930E 来自 USBKille.004DE6A4 ;在这里右键“在反汇编窗口中跟随”
来到这里:
0056930E |. 84C0 test al,al
向上查看,这里就是按钮事件代码了,找到段首,F2下断,F9运行,再次点击注册,断在 005692AF |. 53 push ebx
F8单步
005692A0 /. 55 push ebp
005692A1 |. 8BEC mov ebp,esp
005692A3 |. B9 05000000 mov ecx,5
005692A8 |> 6A 00 /push 0
005692AA |. 6A 00 |push 0
005692AC |. 49 |dec ecx
005692AD |.^ 75 F9 \jnz short USBKille.005692A8
005692AF |. 53 push ebx ;上面有个小循环,为节省分析时间,在这里F2下断
005692B0 |. 8BD8 mov ebx,eax
005692B2 |. 33C0 xor eax,eax
005692B4 |. 55 push ebp
005692B5 |. 68 13945600 push USBKille.00569413
005692BA |. 64:FF30 push dword ptr fs:[eax]
005692BD |. 64:8920 mov dword ptr fs:[eax],esp
005692C0 |. 8D55 F8 lea edx,[local.2]
005692C3 |. 8B83 10030000 mov eax,dword ptr ds:[ebx+310]
005692C9 |. E8 728CF0FF call USBKille.00471F40 ; 取机器码
005692CE |. 8B45 F8 mov eax,[local.2]
005692D1 |. 8D55 FC lea edx,[local.1]
005692D4 |. E8 BF09EAFF call USBKille.00409C98
005692D9 |. 8B55 FC mov edx,[local.1]
005692DC |. 8B83 2C030000 mov eax,dword ptr ds:[ebx+32C]
005692E2 |. E8 BD58F7FF call USBKille.004DEBA4
005692E7 |. 8D55 F0 lea edx,[local.4]
005692EA |. 8B83 14030000 mov eax,dword ptr ds:[ebx+314]
005692F0 |. E8 4B8CF0FF call USBKille.00471F40 ; 取注册码
005692F5 |. 8B45 F0 mov eax,[local.4]
005692F8 |. 8D55 F4 lea edx,[local.3]
005692FB |. E8 9809EAFF call USBKille.00409C98
00569300 |. 8B55 F4 mov edx,[local.3]
00569303 |. 8B83 2C030000 mov eax,dword ptr ds:[ebx+32C]
00569309 |. E8 9653F7FF call USBKille.004DE6A4 ; 关键CALL,调用算法 F7进入
0056930E |. 84C0 test al,al
00569310 |. 75 72 jnz short USBKille.00569384 ; 关键跳
00569312 |. 68 40010000 push 140
00569317 |. 8D55 EC lea edx,[local.5]
F7进入后:
004DE6A4 /$ 55 push ebp
004DE6A5 |. 8BEC mov ebp,esp
004DE6A7 |. 33C9 xor ecx,ecx
004DE6A9 |. 51 push ecx
004DE6AA |. 51 push ecx
004DE6AB |. 51 push ecx
004DE6AC |. 51 push ecx
004DE6AD |. 51 push ecx
004DE6AE |. 51 push ecx
004DE6AF |. 51 push ecx
004DE6B0 |. 51 push ecx
004DE6B1 |. 53 push ebx
004DE6B2 |. 8955 FC mov [local.1],edx
004DE6B5 |. 8BD8 mov ebx,eax
004DE6B7 |. 8B45 FC mov eax,[local.1]
004DE6BA |. E8 896DF2FF call USBKille.00405448
004DE6BF |. 33C0 xor eax,eax
004DE6C1 |. 55 push ebp
004DE6C2 |. 68 5DE74D00 push USBKille.004DE75D
004DE6C7 |. 64:FF30 push dword ptr fs:[eax]
004DE6CA |. 64:8920 mov dword ptr fs:[eax],esp
004DE6CD |. 8D55 F8 lea edx,[local.2]
004DE6D0 |. 8B45 FC mov eax,[local.1]
004DE6D3 |. E8 28B3F2FF call USBKille.00409A00
004DE6D8 |. 8B45 F8 mov eax,[local.2]
004DE6DB |. 50 push eax
004DE6DC |. 8D55 F0 lea edx,[local.4]
004DE6DF |. 8BC3 mov eax,ebx
004DE6E1 |. E8 86000000 call USBKille.004DE76C ; 算法调用 F7进入
004DE6E6 |. 8B45 F0 mov eax,[local.4]
004DE6E9 |. 8D55 F4 lea edx,[local.3]
F7进入后:
004DE76C /$ 55 push ebp
004DE76D |. 8BEC mov ebp,esp
004DE76F |. 6A 00 push 0
004DE771 |. 53 push ebx
004DE772 |. 56 push esi
004DE773 |. 8BF2 mov esi,edx
004DE775 |. 8BD8 mov ebx,eax
004DE777 |. 33C0 xor eax,eax
004DE779 |. 55 push ebp
004DE77A |. 68 B1E74D00 push USBKille.004DE7B1
004DE77F |. 64:FF30 push dword ptr fs:[eax]
004DE782 |. 64:8920 mov dword ptr fs:[eax],esp
004DE785 |. 8D55 FC lea edx,[local.1]
004DE788 |. 8BC3 mov eax,ebx
004DE78A |. E8 31000000 call USBKille.004DE7C0
004DE78F |. 8B55 FC mov edx,[local.1]
004DE792 |. 8BCE mov ecx,esi
004DE794 |. 8BC3 mov eax,ebx
004DE796 |. E8 C5FCFFFF call USBKille.004DE460 ; 算法调用 F7进入
004DE79B |. 33C0 xor eax,eax
004DE79D |. 5A pop edx
F7进入后,下面这段才是真正的算法,红色部分是算法的重点运算部分,
004DE460 /$ 55 push ebp
004DE461 |. 8BEC mov ebp,esp
004DE463 |. 83C4 F0 add esp,-10
004DE466 |. 53 push ebx
004DE467 |. 56 push esi
004DE468 |. 57 push edi
004DE469 |. 33DB xor ebx,ebx
004DE46B |. 895D F0 mov [local.4],ebx
004DE46E |. 895D F4 mov [local.3],ebx
004DE471 |. 894D F8 mov [local.2],ecx
004DE474 |. 8955 FC mov [local.1],edx
004DE477 |. 8B45 FC mov eax,[local.1]
004DE47A |. E8 C96FF2FF call USBKille.00405448
004DE47F |. 33C0 xor eax,eax
004DE481 |. 55 push ebp
004DE482 |. 68 2DE54D00 push USBKille.004DE52D
004DE487 |. 64:FF30 push dword ptr fs:[eax]
004DE48A |. 64:8920 mov dword ptr fs:[eax],esp
004DE48D |. 8D45 F4 lea eax,[local.3]
004DE490 |. E8 036BF2FF call USBKille.00404F98
004DE495 |. 8B45 FC mov eax,[local.1]
004DE498 |. E8 BB6DF2FF call USBKille.00405258
004DE49D |. 8BF8 mov edi,eax
004DE49F |. 85FF test edi,edi
004DE4A1 |. 7E 5C jle short USBKille.004DE4FF
004DE4A3 |. BB 01000000 mov ebx,1
004DE4A8 |> 8D43 1E /lea eax,dword ptr ds:[ebx+1E]
004DE4AB |. 50 |push eax
004DE4AC |. 8BC3 |mov eax,ebx
004DE4AE |. 5A |pop edx
004DE4AF |. 8BCA |mov ecx,edx
004DE4B1 |. 99 |cdq
004DE4B2 |. F7F9 |idiv ecx
004DE4B4 |. 8BF2 |mov esi,edx
004DE4B6 |. 8D43 14 |lea eax,dword ptr ds:[ebx+14]
004DE4B9 |. 50 |push eax
004DE4BA |. 8BC3 |mov eax,ebx
004DE4BC |. 5A |pop edx
004DE4BD |. 8BCA |mov ecx,edx
004DE4BF |. 99 |cdq
004DE4C0 |. F7F9 |idiv ecx
004DE4C2 |. 03F2 |add esi,edx
004DE4C4 |. 8B45 FC |mov eax,[local.1]
004DE4C7 |. 0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-1]
004DE4CC |. 03C6 |add eax,esi
004DE4CE |. 83C0 D0 |add eax,-30
004DE4D1 |. 83E8 0A |sub eax,0A
004DE4D4 |. 72 08 |jb short USBKille.004DE4DE
004DE4D6 |. 83C0 F9 |add eax,-7
004DE4D9 |. 83E8 1A |sub eax,1A
004DE4DC |. 73 1D |jnb short USBKille.004DE4FB
004DE4DE |> 8D45 F0 |lea eax,[local.4]
004DE4E1 |. 8B55 FC |mov edx,[local.1]
004DE4E4 |. 0FB6541A FF |movzx edx,byte ptr ds:[edx+ebx-1]
004DE4E9 |. 03D6 |add edx,esi
004DE4EB |. E8 906CF2FF |call USBKille.00405180
004DE4F0 |. 8B55 F0 |mov edx,[local.4]
004DE4F3 |. 8D45 F4 |lea eax,[local.3]
004DE4F6 |. E8 656DF2FF |call USBKille.00405260
004DE4FB |> 43 |inc ebx
004DE4FC |. 4F |dec edi
004DE4FD |.^ 75 A9 \jnz short USBKille.004DE4A8
004DE4FF |> 8B45 F8 mov eax,[local.2]
004DE502 |. 8B55 F4 mov edx,[local.3]
004DE505 |. E8 E26AF2FF call USBKille.00404FEC
004DE50A |. 33C0 xor eax,eax
004DE50C |. 5A pop edx
004DE50D |. 59 pop ecx
004DE50E |. 59 pop ecx
004DE50F |. 64:8910 mov dword ptr fs:[eax],edx
004DE512 |. 68 34E54D00 push USBKille.004DE534
004DE517 |> 8D45 F0 lea eax,[local.4]
004DE51A |. BA 02000000 mov edx,2
004DE51F |. E8 986AF2FF call USBKille.00404FBC
004DE524 |. 8D45 FC lea eax,[local.1]
004DE527 |. E8 6C6AF2FF call USBKille.00404F98
004DE52C \. C3 retn
算法的简单描述:
1、ASCII(逐位取机器码)+2*位数(拿我的机器码为例:E3B5D073A16293,第1位为E,则 asc("E")+2*1,第2位则为 asc("3")+2*2
2、检查 Chr(ASCII(逐位取机器码)+2*位数) 是否为数字或大写字母,如果是则保留这一个字符作为1位注册码,如果不是,就忽略,计算下一位,直到所有机器码取完
注册码保存在:
C:\Documents and Settings\All Users\Application Data\USBSecurity\svighost.dll
http://hi.baidu.com/null%5Fvbt/blog
VB Code: