本脱壳过程得到cyto、810030大侠的帮助,表示感谢。本笔记没有技术含量,仅仅面向初学者,大侠飘过。
一、key注册。
====================================================================================================
00B2BC43 55 push ebp ; 程序入口点
00B2BC44 8BEC mov ebp,esp
00B2BC46 6A FF push -1
00B2BC48 68 904FB500 push GraspNet.00B54F90
00B2BC4D 68 80B9B200 push GraspNet.00B2B980
00B2BC52 64A1 00000000 mov eax,dword ptr fs[0]
00B2BC58 50 push eax
00B2BC59 648925 00000000 mov dword ptr fs[0],esp
00B2BC60 83EC 58 sub esp,58
00B2BC63 53 push ebx
00B2BC64 56 push esi
00B2BC65 57 push edi
00B2BC66 8965 E8 mov dword ptr ss[ebp-18],esp
00B2BC69 FF15 88F1B400 call dword ptr ds[&KERNEL32.GetV; kernel32.GetVersion
---------------------------------------------------------------------------------------------------
把fly大侠的脚本剽窃了其中的转单进程部分。
转单进程脚本
msg 请忽略所有异常,并添加忽略C000001E异常,然后运行本脚本!
gpa OpenMutexA,kernel32.dll
bp $RESULT
esto
exec
pushad
pushfd
push edx
xor eax,eax
push eax
push eax
call kernel32.CreateMutexA
popfd
popad
jmp kernel32.OpenMutexA
ende
bc eip
msg 现已转换成单进程!
ret
===运行转单进程脚本===
7C80EC1B 8BFF mov edi,edi ; 转换成单进程,停在这里。
7C80EC1D 55 push ebp
7C80EC1E 8BEC mov ebp,esp
7C80EC20 51 push ecx
7C80EC21 51 push ecx
7C80EC22 837D 10 00 cmp dword ptr ss[ebp+10],0
7C80EC26 56 push esi
7C80EC27 0F84 7A500300 je kernel32.7C843CA7
7C80EC2D 64A1 18000000 mov eax,dword ptr fs[18]
7C80EC33 FF75 10 push dword ptr ss[ebp+10]
7C80EC36 8DB0 F80B0000 lea esi,dword ptr ds[eax+BF8]
7C80EC3C 8D45 F8 lea eax,dword ptr ss[ebp-8]
7C80EC3F 50 push eax
7C80EC40 FF15 8C10807C call dword ptr ds[&ntdll.RtlInit; ntdll.RtlInitAnsiString

F9运行,"key required"提示弹出,点击“OK”。

堆栈中找到:
0012EB28 01669748 ASCII "Key"

在反汇编窗口:
Ctrl+G: 01669748
查找Arm特征代码:
Ctrl+B:35 8AC0E665 //Arm特征代码。

找到这里:
01645CD3 8B4424 04 mov eax,dword ptr ss:[esp+4]
01645CD7 C1E0 06 shl eax,6
01645CDA 034424 08 add eax,dword ptr ss:[esp+8]
01645CDE 8B4481 18 mov eax,dword ptr ds:[ecx+eax*4+18>
01645CE2 35 8AC0E665 xor eax,65E6C08A ; Arm特征代码。
01645CE7 C2 0800 retn 8
测试了N个Arm需要key注册的软件,都有这行代码。
===============================================================================
01645CE2 35 8AC0E665 xor eax,65E6C08A ; Arm特征代码。
===============================================================================
在01645CE2下断,F9运行,断下。
再F8一次,停在01645CE7行,注意积存器中eax的值,是本地机器的硬件码,我这里是719EEDDD,既Enter Key界面中的719E-EDDD。

双击积存器eax,修改eax=可用Key的硬件号。

F9运行,弹出Key valid, 显示:Key is valid, and has been stored。

现在Key有效,已经保存在本地,成功!
想看看它到底保存在那里,搜索注册表、监视文件夹,没有找到。
感谢8100303大侠的指点,原来是Arm的注册方式保存。用Trial-Reset v3.0 RC3 搜索,找到这些键值已经加密,所以就没有深入分析。
====================================================================================================
二、脱壳
这时候,原来Arm需要一个可用key才能运行的软件,因为Arm注册方式的保存,和一般的Arm加壳软件一样了。
注意的是现在别用Trial-Reset v3.0 RC3来清理,否则,又回到“旧社会”了。打开dilloDIE,脱壳让它去完成吧。