首页
社区
课程
招聘
[旧帖] 程序被破了,请问如何安全的使用If...End? 0.00雪花
发表于: 2011-3-14 15:20 6149

[旧帖] 程序被破了,请问如何安全的使用If...End? 0.00雪花

2011-3-14 15:20
6149
用VB做的程序,md5用于字符串加密

以下是验证中的判断语句,如果不等,就退出程序
if md5(mysn1)<>md5(mysn2) then end
if left(mysn2,2)<>"AC" then end

结果:程序没被修改(破解前后的程序,md5相同)
   但是破解者提供了一个破解程序,运行破解程序后

明明 mysn1<>mysn2, 但 
if md5(mysn1)<>md5(mysn2) then end  无法结束程序
程序还在往下执行。

破解者是如何做到的? 如何防范?加壳有用吗?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 578
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
判断两个值是否相等,相等就跳走继续执行,不等就退出,这是最简单最好破的软件了
比如我用VB放两个TEXT,一个按钮,值用默认,按钮代码里写
Private Sub Command1_Click()
If Text1.Text <> Text2.Text Then End
End Sub

这时候如果直接点command1,两个Text的默认值一个是Text1,一个是Text2,结果肯定是不等的,会退出
那我们OD来载入,看到这儿
00401C94   .  FF15 68104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
00401C9A   .  8D55 DC       LEA EDX,DWORD PTR SS:[EBP-24]
00401C9D   .  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
00401CA0   .  52            PUSH EDX
00401CA1   .  50            PUSH EAX
00401CA2   .  6A 02         PUSH 2
00401CA4   .  FF15 10104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObjList
00401CAA   .  83C4 18       ADD ESP,18
[COLOR="Red"]00401CAD   .  66:85F6       TEST SI,SI
00401CB0   .  74 06         JE SHORT 工程1.00401CB8
00401CB2   .  FF15 08104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaEnd>] ;  MSVBVM60.__vbaEnd
00401CB8   >  C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0[/COLOR]
00401CBF   .  68 EB1C4000   PUSH 工程1.00401CEB
00401CC4   .  EB 24         JMP SHORT 工程1.00401CEA
00401CC6   .  8D4D E4       LEA ECX,DWORD PTR SS:[EBP-1C]
00401CC9   .  8D55 E8       LEA EDX,DWORD PTR SS:[EBP-18]
00401CCC   .  51            PUSH ECX
00401CCD   .  52            PUSH EDX
00401CCE   .  6A 02         PUSH 2
00401CD0   .  FF15 68104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
00401CD6   .  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]

明显可以看出,如果00401CAD处不为0,就直接走向00401CB2的退出,否则程序就继续
那我们想让软件不退出,修改的地方就很多了,比如把00401CB0的JE改成JNE(条件变反)或JMP,强制跳过退出代码
再要不然把SI值改为0等等

加壳不错,得加加密壳,压缩壳基本作用不大
防破解可以做网络验证,更改判断的方法,加复杂算法
我也是初学,也就这个水平了,将就看下
2011-3-14 15:57
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
3
这就是常说的“爆破”。只是修改了一个跳转。if语句跳转有两个方向,修改跳转代码就可以改变流程。不过真假值都走向一个正确的流程。楼主多看看破解相关的基础帖子。

二楼解释的很清楚
2011-3-14 16:02
0
雪    币: 174
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
随机在程序中的一些地方都加入验证代码.
有些地方运行时随机验证.可能验证也可能不验证.
让他即使修改了一些验证的地方,也不能完全破解
2011-3-16 17:51
0
雪    币: 142
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主你还是这样做吧
VMProtectBeginUltra(AntiFk);
if md5(mysn1)<>md5(mysn2) then end
if left(mysn2,2)<>"AC" then end
VMProtectEnd();
2011-3-16 20:58
0
雪    币: 152
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
二楼正解。。我是新手。。。帮顶。
2011-3-16 21:46
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好啊  学到了
2011-3-16 22:19
0
雪    币: 196
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
  2楼解释的很清楚,谢谢,但我还是知道该怎么处理。再复杂的算法,最后也得有个对比啊,现在的问题是被破解者跳过对比了。而且不是修改原文件,是运行了一个附加程序。
  3楼谢谢版主,我现在刚开始学习
  4楼的得用VMP加密吧,我试过VMP总被报毒。 再问个问题,在Themida中,如果我这样写

Call VarPtr("VM_START")
Call myFunc1
Call VarPtr("VM_END")

请问,myFunc1中的代码,有没有被VM处理?
如果myFunc1中还含有myFunc2,myFunc2有没有被处理?
2011-3-20 12:44
0
雪    币: 9
活跃值: (142)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
9
VM!!!!!!!!
2011-12-2 08:30
0
雪    币: 285
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
借机会学习了一下
2011-12-2 08:31
0
雪    币: 223
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你说的两个文件MD5相同,那就是另个内存补丁程序修改你程序的内存
2011-12-2 08:48
0
游客
登录 | 注册 方可回帖
返回
//