首页
社区
课程
招聘
[旧帖] [求助]爆破--不知道哪是关键跳 哪是关键CALL! 0.00雪花
发表于: 2007-7-15 21:58 13024

[旧帖] [求助]爆破--不知道哪是关键跳 哪是关键CALL! 0.00雪花

2007-7-15 21:58
13024
那两个小东西 一般应该是在注册成功或注册失败的上面的?这个软件 我想应该是在“注册成功”上面的,因为“注册失败”在“注册成功”的后面! 但“注册成功”前面的2个跳转 怎么看都不像是关键跳呀? 但是…………,处于无奈 还是把 “注册成功”前面的2个跳转 改成JMP 。。还是不行!
后来呀~又想了个办法 把“注册失败”的那里 该成 JMP到上面“注册成功”的那里 虽然这样是注册好了,应该还有其他办法的吧??
不知道我这样写你们看得懂吗?!
谢谢啦!
爆破应该可以的,但是爆破后 软件知道我们动过手脚 所以还是给我们个错误提示了!而且这个错误提示好象在字符串里找不到!?
附件: 123.rar

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (42)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
自己仔细分析下程序流程就知道了,别看到个call或是跳转就想着改.
2007-7-15 23:01
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么不来点思路好吗?我就是不会才问的!开导开导我吧!
2007-7-16 10:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是啊。。我也是常常看到各位大大的破文有这么一句
move eax ecx   取用户名

为什么是取用户名呢。。后面的ASUII也没有用户名啊。。无解
2007-7-16 10:39
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好象VB写的东西,作者可能隐藏了!看不到字符串的,move eax ecx 你在寄存器那里看看 有没有你输入的用户名 有就是程序把你的用户名 从ECX 取出 放进 EAX!(不知道我说的对不对)
2007-7-16 10:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
恩。。一般破文都不贴寄存器。楼上说的有道理
2007-7-16 11:10
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
怎么光说他的!不说我的提问啊??? 哪是爆破关键??
2007-7-16 12:14
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
继续顶!没人回答!..
2007-7-16 15:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用w32...找找 关键句..改改机器码~~~行不??
2007-7-16 15:35
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
改机器码有什么用?
2007-7-16 15:42
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
试试ida,可以显示程序流程的
2007-7-16 17:02
0
雪    币: 209
活跃值: (10)
能力值: ( 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 啊
2007-7-16 17:31
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
按你说的我修改过 我觉得理论上讲应该爆破成功的!但还是不行,不知道你试过没有?
改后 注册 点确认出现 错误提示 " is not a valid integer value 没注册成功
"不是合法的整数值"! 这个提示最我来说非常熟悉!我搞了好多次都是这样!
再次求助!
2007-7-16 18:47
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不顶到解决此问题绝不放手!
实在是想不出什么招了!
2007-7-16 20:47
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不顶到解决此问题绝不放手!
2007-7-17 12:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
请问关键句怎么找?我新来的菜鸟,大家不要笑啊
2007-7-17 12:12
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
不能爆的,爆就只是出现假注册成功,我刚下看了看
第一个关键跳转的判断可以用 000000000192  穿过

第二个判断的地方晚上回来再看看,第二步好像才涉及机器码和用户名,不知道能不能搞定
2007-7-17 12:33
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
达人还没来!继续求助!
2007-7-17 21:22
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
顶到解决此问题为止!
2007-7-18 13:27
0
雪    币: 218
活跃值: (10)
能力值: ( 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

从上面地址下段开始分析,你就能了解验算过程了
2007-7-18 19:12
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
楼上的什么意思?
2007-7-18 22:29
0
雪    币: 192
活跃值: (10)
能力值: ( 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  所以有两次跟踪时的大差别!  //推测,完全是推测

呵呵,小弟的第一篇没有目的性的也算不上有什么技术含量的破文就先写到这里!我知道里面错误和漏洞百出
希望坛子上的高手多多指教!!多多赐教啊!!
            初学的朋友若是看到了,也希望能对您能有所帮助,呵呵!!
2007-7-19 02:45
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
23
楼上的灌上饿滴老贴,都这么说咧,
饿也来支持

不过破解这东西有时还得靠运气,运气之后最好要搞懂为啥能成功!
最简单的爆存描述无非是这样:
地址在OD是从上往下看(按数值来看)当然是从大到小,
那么用1,2,3,4,5..来表示
如果4是错语提示call,5是正确提示call,
2这个是跳转,如果跳到3,当然,对我们来说无意义,跳到4,就是出错,跳到5,就是成功,
跳到4的话我们就nop,这样3应该也是一个跳转了,呵呵呵!
---------
这些都是假设,具体得看情况!!~
2007-7-19 09:16
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
‘你说的如果是4,NOP掉,这样3也就算一个跳了’
小弟有这样的疑问一、如果4也被其它语句调用到就不能NOP掉了吧?
                二、3也就息一个跳,对我们来说有什么作用?(3要是个CALL的话运行时也 可                  可能跳到别的地方,那怎么办啊?)
                三、咱们爆破的程序像4、5这两个CALL必须只能有提示错误或正确这单一的功能                  能吧,要是也有其它功能是不是就不能爆破了?
2007-7-19 13:26
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
25
不好意思,你看错我的话了
我系说如果4是错误提示的call,2这个跳转如果跳到4,不就出错了么!所以我们不让他跳的话,就nop掉,后面是假设,如果2跳到错误提示4,那么我们nop的话,程序还是会一直往下运行,直到4,所以,这里3是一个跳转的话,应该就是跳到5这个正确提示这个地方的跳转了!

4被其它语名调用,说明错误校验处并不至有一个!我没说过要把4给nop掉!

现在防爆破的方法多了,比较自校验之类的!当然这只是单一的例子,很简单可以看出爆破点!不过你说call里有其它功能,在一个call内,有其它功能的话,当然不能直接跳过或者nop,这样只会影响到程序的功能,call里面除了提示错误之处还有功能的话当然在里面程序也会分开来,总不可能两个功能同时实现吧,跟进call里就一目了然了
2007-7-19 14:19
0
游客
登录 | 注册 方可回帖
返回
//