能力值:
( LV4,RANK:50 )
2 楼
自己仔细分析下程序流程就知道了,别看到个call或是跳转就想着改.
能力值:
( LV2,RANK:10 )
3 楼
怎么不来点思路好吗?我就是不会才问的!开导开导我吧!
能力值:
( LV2,RANK:10 )
4 楼
是啊。。我也是常常看到各位大大的破文有这么一句
move eax ecx 取用户名
为什么是取用户名呢。。后面的ASUII也没有用户名啊。。无解
能力值:
( LV2,RANK:10 )
5 楼
好象VB写的东西,作者可能隐藏了!看不到字符串的,move eax ecx 你在寄存器那里看看 有没有你输入的用户名 有就是程序把你的用户名 从ECX 取出 放进 EAX!(不知道我说的对不对)
能力值:
( LV2,RANK:10 )
6 楼
恩。。一般破文都不贴寄存器。楼上说的有道理
能力值:
( LV2,RANK:10 )
7 楼
怎么光说他的!不说我的提问啊??? 哪是爆破关键??
能力值:
( LV2,RANK:10 )
8 楼
继续顶!没人回答!..
能力值:
( LV2,RANK:10 )
9 楼
用w32...找找 关键句..改改机器码~~~行不??
能力值:
( LV2,RANK:10 )
10 楼
改机器码有什么用?
能力值:
( LV2,RANK:10 )
11 楼
试试ida,可以显示程序流程的
能力值:
( LV4,RANK:50 )
12 楼
00413E83 6A 00 push 0 //下断
00413E85 8DB3 74030000 lea esi,dword ptr ds:[ebx+374]
00413E8B 56 push esi
00413E8C E8 339D0600 call 123.0047DBC4
00413E91 83C4 0C add esp,0C
00413E94 8DBB 89030000 lea edi,dword ptr ds:[ebx+389]
00413E9A 68 00010000 push 100
00413E9F 6A 00 push 0
00413EA1 57 push edi
00413EA2 E8 1D9D0600 call 123.0047DBC4
00413EA7 83C4 0C add esp,0C
00413EAA 33C0 xor eax,eax
00413EAC 83C9 FF or ecx,FFFFFFFF
00413EAF 56 push esi
00413EB0 57 push edi
00413EB1 8DBD 78FEFFFF lea edi,dword ptr ss:[ebp-188] ; 读取用户名
00413EB7 F2:AE repne scas byte ptr es:[edi]
00413EB9 F7D1 not ecx
00413EBB 2BF9 sub edi,ecx
00413EBD 8BD1 mov edx,ecx
00413EBF 87F7 xchg edi,esi
00413EC1 C1E9 02 shr ecx,2
00413EC4 8BC7 mov eax,edi
00413EC6 F3:A5 rep movs dword ptr es:[edi],dword p>
00413EC8 8BCA mov ecx,edx
00413ECA 83E1 03 and ecx,3
00413ECD F3:A4 rep movs byte ptr es:[edi],byte ptr>
00413ECF 5F pop edi
00413ED0 5E pop esi
00413ED1 57 push edi
00413ED2 8BF7 mov esi,edi
00413ED4 33C0 xor eax,eax
00413ED6 8DBD 78FDFFFF lea edi,dword ptr ss:[ebp-288] ; 读取假码
00413EDC 83C9 FF or ecx,FFFFFFFF
00413EDF F2:AE repne scas byte ptr es:[edi]
00413EE1 F7D1 not ecx
00413EE3 2BF9 sub edi,ecx
00413EE5 8BD1 mov edx,ecx
00413EE7 87F7 xchg edi,esi
00413EE9 C1E9 02 shr ecx,2
00413EEC 8BC7 mov eax,edi
00413EEE F3:A5 rep movs dword ptr es:[edi],dword p>
00413EF0 8BCA mov ecx,edx
00413EF2 83E1 03 and ecx,3
00413EF5 F3:A4 rep movs byte ptr es:[edi],byte ptr>
00413EF7 A1 DCD54A00 mov eax,dword ptr ds:[4AD5DC]
00413EFC 5F pop edi
00413EFD 8B10 mov edx,dword ptr ds:[eax]
00413EFF 52 push edx
00413F00 E8 376FFFFF call 123.0040AE3C
00413F05 59 pop ecx
00413F06 3C 01 cmp al,1
00413F08 0F85 E3010000 jnz 123.004140F1 ; 跳就死!爆破点
00413F0E 8B0D DCD54A00 mov ecx,dword ptr ds:[4AD5DC] ; 123._PlayForm
00413F14 8B01 mov eax,dword ptr ds:[ecx]
00413F16 50 push eax
00413F17 E8 8C71FFFF call 123.0040B0A8
00413F1C 59 pop ecx
00413F1D 3C 01 cmp al,1
00413F1F 0F85 CC010000 jnz 123.004140F1 ; 跳就死!爆破点
00413F25 66:C745 98 4400 mov word ptr ss:[ebp-68],44
00413F2B BA 16634A00 mov edx,123.004A6316 ; 注册成功
00413F30 8D45 E8 lea eax,dword ptr ss:[ebp-18]
00413F33 E8 1C7D0700 call 123.0048BC54
修改两个跳转就行啦,是改je或者NOP,不是改 JMP 啊
能力值:
( LV2,RANK:10 )
13 楼
按你说的我修改过 我觉得理论上讲应该爆破成功的!但还是不行,不知道你试过没有?
改后 注册 点确认出现 错误提示 " is not a valid integer value 没注册成功
"不是合法的整数值"! 这个提示最我来说非常熟悉!我搞了好多次都是这样!
再次求助!
能力值:
( LV2,RANK:10 )
14 楼
不顶到解决此问题绝不放手!
实在是想不出什么招了!
能力值:
( LV2,RANK:10 )
15 楼
不顶到解决此问题绝不放手!
能力值:
( LV2,RANK:10 )
16 楼
请问关键句怎么找?我新来的菜鸟,大家不要笑啊
能力值:
( LV3,RANK:30 )
17 楼
不能爆的,爆就只是出现假注册成功,我刚下看了看
第一个关键跳转的判断可以用 000000000192 穿过
第二个判断的地方晚上回来再看看,第二步好像才涉及机器码和用户名,不知道能不能搞定
能力值:
( LV2,RANK:10 )
18 楼
达人还没来!继续求助!
能力值:
( LV2,RANK:10 )
19 楼
顶到解决此问题为止!
能力值:
( LV4,RANK:50 )
20 楼
00413EB1 |. 8DBD 78FEFFFF LEA EDI,DWORD PTR SS:[EBP-188] ; 用户名送edi
00413EB7 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00413EB9 |. F7D1 NOT ECX
00413EBB |. 2BF9 SUB EDI,ECX
00413EBD |. 8BD1 MOV EDX,ECX
00413EBF |. 87F7 XCHG EDI,ESI
00413EC1 |. C1E9 02 SHR ECX,2
00413EC4 |. 8BC7 MOV EAX,EDI
00413EC6 |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
00413EC8 |. 8BCA MOV ECX,EDX
00413ECA |. 83E1 03 AND ECX,3
00413ECD |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
00413ECF |. 5F POP EDI
00413ED0 |. 5E POP ESI
从上面地址下段开始分析,你就能了解验算过程了
能力值:
( LV2,RANK:10 )
21 楼
楼上的什么意思?
能力值:
( LV2,RANK:10 )
22 楼
我是个新手我也来试了一下,楼主的软件没有壳,好像是用C++写的,下面将实验将过程写出来
请大家多多指正,因为里面的错误和推册的太多了,谢谢大家了!(潜水快半年了,不敢发贴!)
先用OD的查找字符串功能找到“注册失败”“注册成功”的提示
分别记下其RAV地址00413F2B和00427F
先从注册失败处的跳转处下断修改(即:双击注册失败的一行来到这里)
00414203 /74 1E je short 123.00414223 ; (initial cpu selection) //改je为jnz
结果,不行,然后苦想,到底是为什么,后来跟了那个“注册失败”前一个的CALL以为这里有什么文章
结果一连跟进去几个,没有什么收获,自己的思路也乱了(问自己:进这儿的一层层的CALL到底是为为什么呢?
好像有的书里提过要这么跟,但忘了是为什么了,所以查书,没找到。。。。) 后来用OD重载入,输入假用户名和注册号后从堆栈窗口中找到下列明码,
0012FEAC |00A57820 ASCII "6732005625"
0012FEB0 |00A55CC8 ASCII "95162738405104104700"
以为是正确序号的注册码,,结果一个一个试都不行,再来 后来从注册成功的地方下断
修改
00413F08 /0F85 E3010000 jnz 123.004140F1 //jz
00413F1F /0F85 CC010000 jnz 123.004140F1 //jz 改完后,注册时在注册码一栏里必须输入整数,不能输入字符
输入整数后,哈哈!!!按确定,哇,太激动了,居然提示注册成功,再按确定软件就运行了(瞎猫又撞上死老鼠了)
但是有个问题就是运行后提示“打开声音设备失败”,因为不知道这个小软件的作用是什么,也不知道程序能正常运行
时是个什么样子,很可能提楼主给的这个只是软件的一部分,所以有了那样的错误也没有办法解决了(再者,水平太有限了,呵呵)
上述只是简单的两处修改就改变了程序运行的流程,哈,真是太神奇了!
总结:用OD爆破时,先跟据提示信息字串找到相应代码处,再观察是哪个跳转跳到的这个CALL从而进行修改。
另外,之所以第一次先从注册失败处的跳转处下断修改结果没有成功,而后来从注册成功的地方下断就行了,
推测正是一个高级语言中的CASE1,CASE2 两个CASE总有个先来后到,而恰恰先执行了CASE1(即注册成功的一段不成立才跳到CASE2的)
后执行的CASE2 所以有两次跟踪时的大差别! //推测,完全是推测
呵呵,小弟的第一篇没有目的性的也算不上有什么技术含量的破文就先写到这里!我知道里面错误和漏洞百出
希望坛子上的高手多多指教!!多多赐教啊!!
初学的朋友若是看到了,也希望能对您能有所帮助,呵呵!!
能力值:
( LV9,RANK:850 )
23 楼
楼上的灌上饿滴老贴,都这么说咧,
饿也来支持
不过破解这东西有时还得靠运气,运气之后最好要搞懂为啥能成功!
最简单的爆存描述无非是这样:
地址在OD是从上往下看(按数值来看)当然是从大到小,
那么用1,2,3,4,5..来表示
如果4是错语提示call,5是正确提示call,
2这个是跳转,如果跳到3,当然,对我们来说无意义,跳到4,就是出错,跳到5,就是成功,
跳到4的话我们就nop,这样3应该也是一个跳转了,呵呵呵!
---------
这些都是假设,具体得看情况!!~
能力值:
( LV2,RANK:10 )
24 楼
‘你说的如果是4,NOP掉,这样3也就算一个跳了’
小弟有这样的疑问一、如果4也被其它语句调用到就不能NOP掉了吧?
二、3也就息一个跳,对我们来说有什么作用?(3要是个CALL的话运行时也 可 可能跳到别的地方,那怎么办啊?)
三、咱们爆破的程序像4、5这两个CALL必须只能有提示错误或正确这单一的功能 能吧,要是也有其它功能是不是就不能爆破了?
能力值:
( LV9,RANK:850 )
25 楼
不好意思,你看错我的话了
我系说如果4是错误提示的call,2这个跳转如果跳到4,不就出错了么!所以我们不让他跳的话,就nop掉,后面是假设,如果2跳到错误提示4,那么我们nop的话,程序还是会一直往下运行,直到4,所以,这里3是一个跳转的话,应该就是跳到5这个正确提示这个地方的跳转了!
4被其它语名调用,说明错误校验处并不至有一个!我没说过要把4给nop掉!
现在防爆破的方法多了,比较自校验之类的!当然这只是单一的例子,很简单可以看出爆破点!不过你说call里有其它功能,在一个call内,有其它功能的话,当然不能直接跳过或者nop,这样只会影响到程序的功能,call里面除了提示错误之处还有功能的话当然在里面程序也会分开来,总不可能两个功能同时实现吧,跟进call里就一目了然了