学习pj也有二十几天了,头一次遇上vb程序,而初次接触的感觉真叫人头疼。先说明一下,我对vb的bp函数,处理形式,以及常用判断方式一窍不通。但菜鸟有菜鸟的方法。下面就介绍我是怎么KO它的(格斗游戏打多了)。:)
当然可能犯许多错误,欢迎指出,高手勿笑。
软件名称:OverNimble Localize Plus 1.2
简 介:说明上写:“查找 ASCII 所生成的对照文件的扩展名定为“.a.txt”,请尽量保留,因为对照表文件除了扩展名用来标示类型外,没有其它的方法。对
PE 文件,使用 VA 方式查找可以增加准确率,而且可以查找其它语系的程序(如中文、日文)。”
因为非注册用户第一个功能就不可使用不能不让人光火,虽然它只有100多k。
使用工具:trw1.23;hiew(我也只有这两件)
首先运行主程序,打开注册窗口,键入用户名和注册号(废话),用trw设断:bpx messageboxa,bpx messageboxexa,bpx
getdlgitemint,bpx getdlgitemtexta......
什么什么,一个都没拦下!? 岂有此理,用“万能断点”!!bpx hmemcpy,ok了,不愧是万能的。往下一看,妈呀~怎么都是msvbvm50!__vbaXXXXX,跟进去就到了它的领空了,它调用了好几次我都找不到注册码,因为我不清楚是什么意思,只能放弃追注册码了。:(
现在从它的警告窗口着手,非注册用户按它主界面上的“查找ASCII”按钮就会弹出非注册用户不能使用的nag。我下了好多断点都没拦着它,前面说过了I'm菜鸟。后来想到了bpx
lockmytask,在窗口弹出后我们看到:
:00413923 83C40C
add esp, 0000000C (从这儿开始,如不对再向上)
:00413926 8B9A6C030000 mov ebx, dword
ptr [edx+0000036C]
:0041392C 57
push edi
:0041392D FFD3
call ebx
:0041392F 50
push eax
:00413930 8D45E4
lea eax, dword ptr [ebp-1C]
:00413933 50
push eax
:00413934 FF15B8044300 Call dword ptr
[004304B8]
:0041393A 8BF0
mov esi, eax
:0041393C 8D956CFFFFFF lea edx, dword
ptr [ebp+FFFFFF6C]
:00413942 52
push edx
:00413943 56
push esi
:00413944 8B0E
mov ecx, dword ptr [esi]
:00413946 FF91F0000000 call dword ptr
[ecx+000000F0]
:0041394C 85C0
test eax, eax
.
.
.
.
:00413A79 6A00
push 00000000
:00413A7B 50
push eax
:00413A7C C745A008400000 mov [ebp-60], 00004008
:00413A83 FF15C0044300 Call dword ptr
[004304C0]---这里出现警告窗口
ok,拦下就好办了,又是调用msvbvm50!XXXX,看不懂啦。我们把光条往上拉,再按那个按钮,程序在00413923拦下了。我们知道现在下面有好多跳转能够跳过这个call,肯定有一个是判断注册标记的。来,F10跟进.....
:0041394E 7D12
jge 00413962 ----这里没有过00413a83
:00413950 68F0000000 push 000000F0
:00413955 6834AD4000 push 0040AD34
:0041395A 56
push esi
:0041395B 50
push eax
:0041395C FF156C044300 Call dword ptr
[0043046C]
:00413962 8BB56CFFFFFF mov esi, dword
ptr [ebp+FFFFFF6C]
:00413968 8D4DE4
lea ecx, dword ptr [ebp-1C]
:0041396B FF15F8064300 Call dword ptr
[004306F8]
:00413971 0FBFC6
movsx eax, si
:00413974 85C0
test eax, eax
:00413976 0F8430010000 je 00413AAC
----让这里....(jump)^_^ :0041397C 0F8E3C010000
jle 00413ABE
:00413982 83F803
cmp eax, 00000003
:00413985 0F8F33010000 jg 00413ABE:00413A76
8D45A0
抱着运气试试,到00413976时下命令a,键入jnz 00413aac,强迫它跳,g!
没想到一下子成功了,出现分析完毕窗口。我想,编这个程序员也许也是菜鸟,在软件运行中居然不断给出提示,包括注册名没填啦什么的,这可是大忌,但对我们来说好事。现在运行command——hiew...什么什么,找到地址不对!?一定是加了壳,用trw
load它,果然下面写着upx1+...领空。可菜鸟不会脱壳,不要紧,我们下命令d413976,看到?? ?? ??.....说明程序还未解压,我们继续跟踪,直到:
0043B01C: 8B02
mov eax,[edx]
0043B01E: 83C204
add edx,004 ;""
0043B021: 8907
mov [edi],eax
0043B023: 83C704
add edi,004 ;""
0043B026: 83E904
sub ecx,004 ;""
0043B029: 77F1
ja .00043B01C --------
(1)
0043B02B: 01CF
add edi,ecx
0043B02D: E9A9000000
jmp .00043AF7E -------- (2)
0043B032: 5E
pop esi
0043B033: 89F7
mov edi,esi
0043B035: B96B020000
mov ecx,00000026B ;" k"
0043B03A: 8A07
mov al,[edi]
从上面开始到(2)跳转是一个循环,我们把光条拖到43b032上按F7,看到413976已经有数据了,我们u413976:
00413976 0F8430010000 je 00413AAC
0041397C 0F8E3C010000 jle 00413ABE
00413982 83F803
cmp eax, 00000003
.
.
.
就是我们要改的数据,且没有加密,在hiew下找一块空地如下,现在就在(2)上打补丁,让它j到这块空地的基址:
0043B0D7: 0000
add [eax],al
0043B0D9: 0000
add [eax],al
0043B0DB: 66C705763941000F85 mov
w,[000413976],0850F ;"?"
0043B0E4: E995FEFFFF
jmp .00043AF7E -------- (1)
0043B0E9: 0000
add [eax],al
0043B0EB: 0000
add [eax],al
0043B0ED: 0000
add [eax],al
本来都是0000 add [eax],al,那两行是自己加进去的,注意43b0e4的意思是mov
word ptr[413976],850f,用hiew的同胞们要小心,最后再让它j回原本要跳的地址。
ok了,运行此vb程序,按了ascII按钮没有了刚才的提示,正常工作了,和已注册不是一样吗:),可惜此软件太戆,vb实在编不出什么好东西(纯属个人观点),而只会给ck带来麻烦,以后microsoft会越发把编程倾向简单化,不希望程序员去了解底层操作。何况vb的用途越来越难开发,因为功能本身定制好了,只会用控件进行“搭积木”式编程,代码短短几十行,编个病毒吧,难道还带个1M的运行库给别人?而且兼容性越来越差,据说vb7版本mic为了赶borland的delphi,竟忽视了语言本身的兼容性!!显然是不可接受的,这就是大多vb程序员改行delphi的另一原因。
- 标 题:菜鸟的一篇拙文 (6千字)
- 作 者:八鸟@
- 时 间:2002-2-16 17:23:24
- 链 接:http://bbs.pediy.com