-
-
[原创]菜鸟初试算法分析之一Security Administrator v10.2
-
发表于:
2006-5-8 15:10
8052
-
[原创]菜鸟初试算法分析之一Security Administrator v10.2
【文章标题】: 菜鸟初试算法分析之一Security Administrator v10.2
【文章作者】: wind
【作者邮箱】: qf100@163.com
【软件名称】: Security Administrator v10.2
【下载地址】: http://www.skycn.com/soft/3205.html
【加壳方式】: 无
【保护方式】: Serial
【编写语言】: Delphi 6.0 - 7.0
【使用工具】: Ollydbg PEiD
【操作平台】: WinXPsp2
【作者声明】:让你保护你的电脑和完全控制其的访问,可以定制有访问权限的人员及其权限的等级,
可以把控制面板里的显示、网络、密码、打印机和系统选项保护起来,还可以关闭开始菜单里的项目,
可以隐藏驱动器,禁止DOS提示符,隐藏桌面图标等等
【作者声明】: 我的第一篇算法分析,难度很低适合和我一样菜的朋友共同分享。只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
初学算法分析,所以捡了个软柿子,算是和初学者分享自己的一点心得,高手就请跳过了。
查壳:Delphi 6.0 - 7.0 无壳
试探:程序启动后跳出NAG要求注册,输入注册码78787878 点击后提示"This registration code is invalid"
OD
加载后,下断点bp MessageBoxA 输入注册码确认后断在
77D504EA > 8BFF
mov edi,
edi
77D504EC 55
push ebp
77D504ED 8BEC
mov ebp,
esp
77D504EF 833D BC04D777 00
cmp dword ptr ds:[77D704BC],0
77D504F6 74 24
je short user32.77D5051C
取消断点后 Alt+F9 返回程序领空
0048A686 |. E8 8DCEF7FF
call <jmp.&user32.MessageBoxA>
; \MessageBoxA
0048A68B |. 8945 F8
mov [local.2],
eax ;返回到这里
0048A68E |. 33C0
xor eax,
eax
0048A690 |. 5A
pop edx
0048A691 |. 59
pop ecx
0048A692 |. 59
pop ecx
0048A693 |. 64:8910
mov dword ptr fs:[
eax],
edx
然后Ctrl+F9返回上一层
00499653 |. 33C0
xor eax,
eax ;返回到这里
00499655 |. 5A
pop edx
00499656 |. 59
pop ecx
00499657 |. 59
pop ecx
00499658 |. 64:8910
mov dword ptr fs:[
eax],
edx
0049965B |. 68 75964900
push newadmin.00499675
00499660 |> 8D45 F8
lea eax,[local.2]
00499663 |. BA 02000000
mov edx,2
00499668 |. E8 67B1F6FF
call newadmin.004047D4
0049966D \. C3
retn
0049966E .^ E9 41ABF6FF
jmp newadmin.004041B4
00499673 .^ EB EB
jmp short newadmin.00499660
00499675 . 59
pop ecx
00499676 . 59
pop ecx
00499677 . 5D
pop ebp
00499678 . C3
retn
继续Ctrl+F9返回再上一层 就明朗了
004A8224 /$ 55
push ebp
004A8225 |. 8BEC
mov ebp,
esp
004A8227 |. B9 06000000
mov ecx,6
004A822C |> 6A 00 /
push 0
004A822E |. 6A 00 |
push 0
004A8230 |. 49 |
dec ecx
004A8231 |.^ 75 F9 \jnz short newadmin.004A822C
004A8233 |. 51
push ecx
004A8234 |. 53
push ebx
004A8235 |. 56
push esi
004A8236 |. 8BF0
mov esi,
eax
004A8238 |. 33C0
xor eax,
eax
004A823A |. 55
push ebp
004A823B |. 68 A3834A00
push newadmin.004A83A3
004A8240 |. 64:FF30
push dword ptr fs:[
eax]
004A8243 |. 64:8920
mov dword ptr fs:[
eax],
esp
004A8246 |. 8D55 F4
lea edx,[local.3]
004A8249 |. 8B86 48030000
mov eax,
dword ptr ds:[
esi+348]
004A824F |. E8 7810FCFF
call newadmin.004692CC
;计算注册码位数
004A8254 |. 8B45 F4
mov eax,[local.3]
;注册码进eax
004A8257 |. 8D55 F8
lea edx,[local.2]
004A825A |. E8 8938FEFF
call newadmin.0048BAE8
004A825F |. 8B55 F8
mov edx,[local.2]
;注册码进EDX
004A8262 |. B8 4CED4C00
mov eax,newadmin.004CED4C
004A8267 |. E8 98C5F5FF
call newadmin.00404804
004A826C |. E8 FBFDFFFF
call newadmin.004A806C
;关键CALL 跟进☆☆☆☆☆
004A8271 |. 8BD8
mov ebx,
eax ;ebx=eax
004A8273 |. 84DB
test bl,
bl
004A8275 |. 0F84 D9000000
je newadmin.004A8354
;bl为0则挂
到这里很明显就是说bl=1则注册成功,又因为ebx=eax 所以al等于1就注册成功了,待会我们跟进关键CALL的时候就要注意这一点
004A827B |. C686 70030000 01
mov byte ptr ds:[
esi+370],1
004A8282 |. 8D45 FC
lea eax,[local.1]
004A8285 |. 50
push eax
004A8286 |. 8D55 F0
lea edx,[local.4]
004A8289 |. B8 BC834A00
mov eax,newadmin.004A83BC
; ASCII "BF8A83B980"
004A828E |. E8 E14CFEFF
call newadmin.0048CF74
;变换字符串成为注册表键值
004A8293 |. 8B45 F0
mov eax,[local.4]
004A8296 |. 50
push eax
004A8297 |. 8D55 EC
lea edx,[local.5]
004A829A |. B8 D0834A00
mov eax,newadmin.004A83D0
; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A829F |. E8 D04CFEFF
call newadmin.0048CF74
;变换字符串成为注册表键值
004A82A4 |. 8B55 EC
mov edx,[local.5]
004A82A7 |. A1 54ED4C00
mov eax,
dword ptr ds:[4CED54]
004A82AC |. 59
pop ecx
004A82AD |. E8 FA7FFEFF
call newadmin.004902AC
004A82B2 |. 8D55 E8
lea edx,[local.6]
004A82B5 |. A1 4CED4C00
mov eax,
dword ptr ds:[4CED4C]
004A82BA |. E8 194CFEFF
call newadmin.0048CED8
004A82BF |. 8B45 E8
mov eax,[local.6]
004A82C2 |. 50
push eax
004A82C3 |. 8D55 E4
lea edx,[local.7]
004A82C6 |. B8 0C844A00
mov eax,newadmin.004A840C
; ASCII "BF9D9FAE999E"
004A82CB |. E8 A44CFEFF
call newadmin.0048CF74
;写入注册表 作为注册后的标志
004A82D0 |. 8B45 E4
mov eax,[local.7]
004A82D3 |. 50
push eax
004A82D4 |. 8D45 E0
lea eax,[local.8]
004A82D7 |. 50
push eax
004A82D8 |. B8 D0834A00
mov eax,newadmin.004A83D0
; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A82DD |. 5A
pop edx ;写入注册表 作为注册后的标志
004A82DE |. E8 914CFEFF
call newadmin.0048CF74
这里写入的是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DRMRSX
004A82E3 |. 8B55 E0
mov edx,[local.8]
004A82E6 |. A1 54ED4C00
mov eax,
dword ptr ds:[4CED54]
004A82EB |. 59
pop ecx
004A82EC |. E8 FB80FEFF
call newadmin.004903EC
004A82F1 |. 837D FC 00
cmp [local.1],0
004A82F5 |. 75 46
jnz short newadmin.004A833D
004A82F7 |. E8 5829F6FF
call newadmin.0040AC54
004A82FC |. 83C4 F8
add esp,-8
004A82FF |. DD1C24
fstp qword ptr ss:[
esp]
004A8302 |. 9B
wait
004A8303 |. 8D45 DC
lea eax,[local.9]
004A8306 |. E8 A94EFEFF
call newadmin.0048D1B4
004A830B |. 8B45 DC
mov eax,[local.9]
004A830E |. 50
push eax
004A830F |. 8D55 D8
lea edx,[local.10]
004A8312 |. B8 BC834A00
mov eax,newadmin.004A83BC
; ASCII "BF8A83B980"
004A8317 |. E8 584CFEFF
call newadmin.0048CF74
004A831C |. 8B45 D8
mov eax,[local.10]
004A831F |. 50
push eax
004A8320 |. 8D45 D4
lea eax,[local.11]
004A8323 |. 50
push eax
004A8324 |. B8 D0834A00
mov eax,newadmin.004A83D0
; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A8329 |. 5A
pop edx ;;写入注册表 作为注册后的标志
004A832A |. E8 454CFEFF
call newadmin.0048CF74
004A832F |. 8B55 D4
mov edx,[local.11]
004A8332 |. A1 54ED4C00
mov eax,
dword ptr ds:[4CED54]
004A8337 |. 59
pop ecx
004A8338 |. E8 AF80FEFF
call newadmin.004903EC
004A833D |> 8D55 D0
lea edx,[local.12]
004A8340 |. B8 24844A00
mov eax,newadmin.004A8424
; ASCII "M_THANKS"
004A8345 |. E8 3A03FFFF
call newadmin.00498684
;看字符串很清晰,这里是成功了
004A834A |. 8B45 D0
mov eax,[local.12]
004A834D |. E8 AE12FFFF
call newadmin.00499600
004A8352 |. EB 1F
jmp short newadmin.004A8373
004A8354 |> B8 4CED4C00
mov eax,newadmin.004CED4C
004A8359 |. E8 52C4F5FF
call newadmin.004047B0
004A835E |. 8D55 CC
lea edx,[local.13]
004A8361 |. B8 38844A00
mov eax,newadmin.004A8438
; ASCII "M_BADCODE"
004A8366 |. E8 1903FFFF
call newadmin.00498684
;到这里就挂掉
004A836B |. 8B45 CC
mov eax,[local.13]
004A836E |. E8 8D12FFFF
call newadmin.00499600
;返回到这里后,向上看
004A8373 |> 33C0
xor eax,
eax
004A8375 |. 5A
pop edx
004A8376 |. 59
pop ecx
004A8377 |. 59
pop ecx
004A8378 |. 64:8910
mov dword ptr fs:[
eax],
edx
004A837B |. 68 AA834A00
push newadmin.004A83AA
004A8380 |> 8D45 CC
lea eax,[local.13]
004A8383 |. BA 0A000000
mov edx,0A
004A8388 |. E8 47C4F5FF
call newadmin.004047D4
004A838D |. 8D45 F4
lea eax,[local.3]
004A8390 |. E8 1BC4F5FF
call newadmin.004047B0
004A8395 |. 8D45 F8
lea eax,[local.2]
004A8398 |. BA 02000000
mov edx,2
004A839D |. E8 32C4F5FF
call newadmin.004047D4
004A83A2 \. C3
retn
004A83A3 .^ E9 0CBEF5FF
jmp newadmin.004041B4
004A83A8 .^ EB D6
jmp short newadmin.004A8380
004A83AA . 8BC3
mov eax,
ebx
004A83AC . 5E
pop esi
004A83AD . 5B
pop ebx
004A83AE . 8BE5
mov esp,
ebp
004A83B0 . 5D
pop ebp
004A83B1 . C3
retn
=================
进入004A826C call newadmin.004A806C =====================================================
004A806C /$ 53
push ebx
004A806D |. 56
push esi
004A806E |. 57
push edi
004A806F |. BF 4CED4C00
mov edi,newadmin.004CED4C
004A8074 |. 33F6
xor esi,
esi
004A8076 |. 33DB
xor ebx,
ebx
004A8078 |. 8B07
mov eax,
dword ptr ds:[
edi]
004A807A |. E8 F1C9F5FF
call newadmin.00404A70
;计算注册码位数
004A807F |. 83F8 0E
cmp eax,0E
;必须是14位 不是则挂
004A8082 |. 75 67
jnz short newadmin.004A80EB
004A8084 |. 8B07
mov eax,
dword ptr ds:[
edi]
;注册码进eax
004A8086 |. 8038 36
cmp byte ptr ds:[
eax],36
;比较第1位的ASC码是否是36
004A8089 |. 0F94C0
sete al
004A808C |. 83E0 7F
and eax,7F
;和7F与运算
004A808F |. 03F0
add esi,
eax ;累加到esi
004A8091 |. 8B07
mov eax,
dword ptr ds:[
edi]
004A8093 |. 8078 02 32
cmp byte ptr ds:[
eax+2],32
;比较第3位ASC码是否是32
004A8097 |. 0F94C0
sete al
004A809A |. 83E0 7F
and eax,7F
004A809D |. 03F0
add esi,
eax
004A809F |. 8B07
mov eax,
dword ptr ds:[
edi]
004A80A1 |. 8078 03 31
cmp byte ptr ds:[
eax+3],31
;比较第4位ASC码是否是31
004A80A5 |. 0F94C0
sete al
004A80A8 |. 83E0 7F
and eax,7F
004A80AB |. 03F0
add esi,
eax
004A80AD |. 8B07
mov eax,
dword ptr ds:[
edi]
004A80AF |. 8078 04 39
cmp byte ptr ds:[
eax+4],39
;比较第5位ASC码是否是39
004A80B3 |. 0F94C0
sete al
004A80B6 |. 83E0 7F
and eax,7F
004A80B9 |. 03F0
add esi,
eax
004A80BB |. 8B07
mov eax,
dword ptr ds:[
edi]
004A80BD |. 8078 07 30
cmp byte ptr ds:[
eax+7],30
;比较第8位ASC码是否是30
004A80C1 |. 0F94C0
sete al
004A80C4 |. 83E0 7F
and eax,7F
004A80C7 |. 03F0
add esi,
eax
004A80C9 |. 8B07
mov eax,
dword ptr ds:[
edi]
004A80CB |. 8078 08 35
cmp byte ptr ds:[
eax+8],35
;比较第9位ASC码是否是35
004A80CF |. 0F94C0
sete al
004A80D2 |. 83E0 7F
and eax,7F
004A80D5 |. 03F0
add esi,
eax
004A80D7 |. 8B07
mov eax,
dword ptr ds:[
edi]
004A80D9 |. 8078 0A 33
cmp byte ptr ds:[
eax+A],33
;比较第11位ASC码是否是33
004A80DD |. 0F94C0
sete al
004A80E0 |. 83E0 7F
and eax,7F
004A80E3 |. 03F0
add esi,
eax ;以上验证共7处 累加到esi正好是7
004A80E5 |. 83FE 07
cmp esi,7
;比较esi是否是7
004A80E8 |. 0F94C3
sete bl ;是则条件为真,置bl为1
004A80EB |> 8BC3
mov eax,
ebx ;eax=ebx
004A80ED |. 5F
pop edi
004A80EE |. 5E
pop esi
004A80EF |. 5B
pop ebx
004A80F0 \. C3
retn
--------------------------------------------------------------------------------
【经验总结】
算法如下:
1:
注册码必须是14位
2:
注册码的第一,三,四,五,八,九,十一分别是6,2,1,9,0,5,3,其他数位任意
注册码形如6X219XX05X3XXX
注册后写入注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DRMRSX]
"RprCts"=
"DB8CDFDCD48F8EDDD889DE888B8A"
"RgnTm"=
"38842~4947352431"
删除又可以再玩一次。菜鸟写文章,感谢大家看完。失误之处敬请诸位大侠赐教!
顺便写了个注册机,代码丑陋,就不贴了,需要的朋友可以到windz.ys168.com去下
--------------------------------------------------------------------------------
【版权声明】: 本文纯属技术交流,请支持正版软件, 转载请注明作者并保持文章的完整, 谢谢!
by wind
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法