本帖最后由 姐又寡闻了 于 2019-6-6 22:32 编辑
来到论坛也有一段时间了,玩了一段日子的爆破,想玩玩别的方式了。学了一段日子的汇编 就拿U盘杀毒专家这个软件来试试吧。
大家可以自行搜索 U盘杀毒专家进行下载,这个软件还可以吧 我U盘在学校的机子上感染了病毒,就用他把病毒干掉的
首先打开软件 点击注册
弹出错误 直接拉到OD 用暂停法,这里就不查壳和脱壳了 将软件在OD中运行,输入假码 进行注册 弹出错误弹窗,然后F12暂停 查看堆栈窗口K
双击所在行 进入弹错CAll 然后找到可以跳过去的 跳转指令
jnz指令就是我们找到的可以跳过去的 那上面自然就是关键call了 在关键call下断. 运行程序, 此时在关键call断下,F7进CAll
然后单步跟下去 会有两个可以注册码
这是第一个可疑注册码 我们记下来
这是第二个注册码 我们也记下来,经过测试他就是真码
但我们今天玩的是 这个真码究竟是如何算出来的,我们在出现真码的上一个CAll, F7跟进去
进去 后单步跟 我们又一次看到了 机器码
我们在出现机器码的下一个CAll跟进去 这里就是算法部分了, 很简单的 适合和我一样的新手来分析 这里我就把算法部分贴出来 如有不对的地方,还请指正
[Asm] 纯文本查看 复制代码
004DEF68 8D43 14 lea eax,dword ptr ds:[ebx+0x14]
004DEF6B 50 push eax
004DEF6C 8BC3 mov eax,ebx
004DEF6E 5A pop edx ; 0012F8A8
004DEF6F 8BCA mov ecx,edx
004DEF71 99 cdq
004DEF72 F7F9 idiv ecx
004DEF74 8BF2 mov esi,edx
004DEF76 8D43 1E lea eax,dword ptr ds:[ebx+0x1E]
004DEF79 50 push eax
004DEF7A 8BC3 mov eax,ebx
004DEF7C 5A pop edx ; 0012F8A8
004DEF7D 8BCA mov ecx,edx
004DEF7F 99 cdq
004DEF80 F7F9 idiv ecx
004DEF82 03F2 add esi,edx
004DEF84 46 inc esi 上面的计算是 计算每次循环所取机器码位置的2倍再加1的值放到esi中
004DEF85 8B45 FC mov eax,dword ptr ss:[ebp-0x4]
004DEF88 0FB64418 FF movzx eax,byte ptr ds:[eax+ebx-0x1] 每循环一次 将机器码的其中一位给 eax
004DEF8D 03C6 add eax,esi esi为上面所取机器码所在位置的2倍再加1
004DEF8F 40 inc eax eax自增1
004DEF90 83C0 CF add eax,-0x31 eax-31
004DEF93 83E8 09 sub eax,0x9 eax-9
004DEF96 72 08 jb short USBKille.004DEFA0 进行判断 小于就跳
004DEF98 83C0 F9 add eax,-0x7 eax-7 符合条件的话 就是 此时eax-7>0
004DEF9B 83E8 1A sub eax,0x1A eax-1A 符合条件的话就是 此时 eax-1A<0
004DEF9E 73 1E jnb short USBKille.004DEFBE 进行判断 不小于就跳
004DEFA0 8D45 F0 lea eax,dword ptr ss:[ebp-0x10]
004DEFA3 8B55 FC mov edx,dword ptr ss:[ebp-0x4]
004DEFA6 0FB6541A FF movzx edx,byte ptr ds:[edx+ebx-0x1] 开始计算真正的注册码 取机器码中的一位(每次循环按顺序取一位)
004DEFAB 03D6 add edx,esi edx为这一次循环中所取的机器码其中的一位 esi为上面所取机器码所在位置的2倍再加1
004DEFAD 42 inc edx edx自增1 将edx此时的值转换成ascii码 就是对应的机器码位置计算出来的注册码 我们将每一次循环的值记下来就是真正的注册码了
004DEFAE E8 E961F2FF call USBKille.0040519C
004DEFB3 8B55 F0 mov edx,dword ptr ss:[ebp-0x10]
004DEFB6 8D45 F4 lea eax,dword ptr ss:[ebp-0xC]
004DEFB9 E8 BE62F2FF call USBKille.0040527C
004DEFBE 43 inc ebx
004DEFBF 4F dec edi
004DEFC0 ^ 75 A6 jnz short USBKille.004DEF68
jb 小于就跳
jnb 不小于就跳
检测的是CF标志位 CF标志位 对于无符号计算时 最高位进位或者借位时,则为1
|