【doc】易语言程序的另类破解实验及防范
易语言程序的另类破解实验及防范 >栏目编辑>icefi~>icefire@hackercorn.Cn
icefir'e:易语言简单易学易用,所以吸引了很多人学习及使用.杂志上一期中《RsA:
马其
诺防线?!》一文讲述了易语言签名验证()的另类破解,在本期,将由小万同学带领大
家了解一
下取硬盘特征字()的另类破解及如何防范此类的破解. 适合读者逆向爱好者,易语言程序员
前置知识汇编入门知识.0D的简单使用,易语言编程 易语言程序的
另类破解实验及防
先简单介绍一下易语言中的一个命令取硬盘
特征字()
髑甩格式:整数塑>取硬盘特征字()一系统核
心支挎瘁0?其能
英文名鞠GetHl~Code
返厨电磨中第夺物理硬盘的物理特征字,该特征字是 仅硬件相关的,也就是说与任何软件系统舔嚣荚(包括摄作系 统).掰户可以使痢就特征字来限锻自己的程序仅在莱一台计算 枫上运行.以保护骞软件的版权.本命夸可以在任何Win— do'r8系统版本下运行龠令执嚣期果遥鞫,表示此次取 瑷|盘特征字失败瞻手有可能是霹为暂时的/冲突激减,因 此失敢詹可瑷等待一段精槐时饲后再试(可以参藿l碉程).如皋 重复尝试四五次詹仍然失败,表明该硬盘免法取出特征字.本 命令为:朗级命令.
操作系统需求:Windows
实验原理
正是因为取硬盘特征字()的易用性.绝大多数 的易语言程序员使用了此命令作为共享软件的机器 码.然而此命令却给易语言共享软件带来很大的隐 患从介绍中我们可以得知它是易语言系统核心支 持库中的命令,也就是由系统核心支持库完成取硬 盘特征字的操作.聪明的你一定想到.问题就出在 这个核心支持库上.Cracker通过十六进制编辑工具 修改易语言的系统核心支持库,使得程序调用取硬
命令时返回Cracker想得到的值,这就是 盘特征字()
易语言的另类破解.
实验目的
了解易语言的另类破解过程,并通过实验找出 防范另类破解的方法.
实验工具
1.HA—
olIyDBG一
1.
1O_
second_
cao—
cong—fix
2.用易语言新建一程序.界面如图1所示. 图1
双击取硬盘特征字"按钮,进入程序设计界 面.输入程序代码如图2所示.事件子程序的作用是 将系统核心支持库返回的硬盘特征字写到取硬盘特 征字编辑框中.并弹出一信息框.
实验用的测试程序到此就写完了,非独立编译 后待用.
于以上二种鳊译方式,本文为实验方便选用的是非 独立鳊译.
实验过程
用0IIyDbg载入编译好的测试程序,F9运行. 在命令行处下断点BpMessageBoxA.如图3所 示.这就是我为什么要在按钮单击事件的子程序中 加入信息框的目的.
骛霉蠹嚣嚣爨萋篓聚
j目缩辑)iceflre)icefire@h—
acker.c—
om.cn
图5
单击"取硬盘特征字"按钮,程序断在
可以从右下角堆栈友好提示中得知MessageBoxA
的调用处,如图4所示.
0咖0咖?m…j:..
?1.18?Txt=当前硬盘特征宇为-2lIl9'2l2q 1?DeTlue=孺?:
?000-st=B_OKI?_T^smD^L
?l彻
?lIM?
长劬伽0Dl翻
I伽5肋,2噬回到hn1O05DPF2木自rdn100520一 ?l2F6I8吼I一2141942~
009%?3J
图4
根据提示来到10062140处并向上找到
100620A0处.
在100620A0处下断按F9让程序继续运行直到 弹出信息框再次单击"取硬盘特征字"按钮,程 序断在100620A0处从右下角堆栈友好提示中得知 更上一层的调用处如图5所示.
图5
100620A083EC64SUBESP.64 ;在比处下新,找足上一曩的调用
1OO62OA356PUSHESI
1O062OA48B742474MOV?ESlDWoRDP,rR
SS:lEsP+74I
1OO62OA857PUSHEDI
来到10028F89处向上查找代码在10028F61 处下断.按F9让程序继续运行直到弹出信息框再 次单击"取硬盘特征字"按钮,程序断在
10028F61,此时右下角堆栈友好提示如图6所示. 根据右下角堆栈友好提示来~joo4o36c8处,向 002,5媚O咖O
00!F6?000?l
002F6BL00922o
002F6~4l蚴Fc8逆司到kIlln~.0026FC;3来自hd.I?s? 0[『2F6髓啪l2F6BC
O02F6~ClO脚9延回到hIlln10029009 O0ZFSC000目惭30
O02F6Cl00功Bl0h?d100皿BIO
O0ZF6C~0明日g的0
O02F6CC100皿B10hnh100瑚10
图6
上查找代码,来~J004036B0处,也就按钮单击事件 的开始点.下断并按F9让程序继续运行直到弹出信
息框,再次单击取硬盘特征字"按钮,程序断在
004036B0处.此时我们单步跟踪.
进入004036C3,可以看到JMP到系统核心支持
库的调用代码.F7继续跟进.
来到如下代码处
1oo28F61A1O8DBOE1OMOVEAX.DWoRD 阿DS:【1O咂D嘲】
10o28F66o318ADDEBx,DWoRDP,rRDS:[EAX】
……
略去代码若干……
10028F8652PUSHEDX
1Oo28F87FFI3CALLDWORDPTRDS: 【EBX】krnLn.Iooeg2co//此处藏是芙链了,F7蠢避 1Oo28F89BB4424OCMOVEA)【.DWORDPTR SS[ESP+C1
10o28F8D8B54241OM0VEDX.DWORDP,rR sS:lESP+lOl
1oo28F918B4C2414MoVECX.DWoRD P,rRsS:【,P+14】
10o28F9583C418ADDESP,18 1O028F98C3RETN
跟进10028F87处的系统核心支持库的服务调用
CALL来到100692C0处后继续跟进100692C2处的 CALLkrnln.1000DFF0.可以得出如下分析:
目编辑>icefire>icefire@hacker.comcn
l0o0DFFO56PUSHESI
l000DlE8DAFEFFFFCALLkmln.1OO啊0叻0
,囊?盘赣往孛,麓兴蠢的可坟曩避奢麓一下敷曩土..往串
的镰停过囊
l咖DFF68B1)o.MOVEDX.EAX l00哪8BE0100OO0OMOVESI.l l0o0DFFD85D2TESTEDX正DX
lOO00FFF752EJNZSH0RTkmln.1OOOEO2F
;如秉囊一值,室囊幂冀
l000E001鹞lAFDFFFFCALL嘲1000DD20 蠢?囊羹l量齄缸亭一
?
1000E0068BD0MOVEDX,EAX, 将曩盘麓撼串?暮AX俘軎llEDX中
l/BE0:柏0oO00MOVE.2
lO0oE0oD85D21.断EDX.EDX
lOOOEOOF751EJNZSHORTkrnln. 1oo0E02F;.1秉囊?值身宝囊不蕞
l咖E0ll'E8BAFFFFFFCALLkrnln.1000Dn)o
;蠢繁囊t盘糖往串
l0O0E0168BD0MOVEDX.EAX l0o0EOl8BE030o0o0o0,rEs1.3 l00oEolD85D2TESTEDX.EDX 1000E01F750EJNZSHORTkrnln. IO00E02F.1jI取膏值为宝砖誉蕊.?叁曩|毫?值将为O 1000E02I57PU8HEDI
……
略去代码若干……
l00嘲08MOVDWORD阿tDS~EAXCX l明'日n48BC2MOVEAX.EDX
X,曩?屯曩置将EDX謦坎
POPESl
RETN
经过如图7所示的修改,并通过选择代码行后 点右键弹出的菜单,选择"复制到可执行文件"并 保存为新文件.另类破解的实验就基本完成了. 图7
鲁篡釜
编辑当前代码行.不过字节数不能超出当前行,否 则超出部分将把下面的代码行覆盖.如果不小心将 下面的代码行覆盖或修改错误,可以通过右键菜单 中的"撤消选择处修改"命令返回原始状态. 实验结果
将修改过的文件重命名为krnln.fnr并与测试程序 放到同一目录下.运行后界面如图8所示. 图8
实验总结
本次实验演示了如何从易语言支持库下手的破 解.这是易语言程序员必须注意的一个问题,因为 使用此法可以通破绝大多数易语言程序,如自身加 密很变态的《求真易语言工具箱3.0)),用常规方法 很难破解,但在另类破解面前却很轻易的被破解. 要防止另类破解,即要检查系统核心支持库是 否被修改,可以有很多种方法.下面的例程是取系 统核心支持库的数据摘要(I~pMD5值)进行校验是否 被修改.易语言源码如下:
.
版本2
.
支持库dp1
.
程序集程序集1
.
子程序J表动子程序,整数型,,本子程序在程序启动后最 先执行
局部变量核心支持库数据摘要,文本型…核心支持库的 数据摘要
局部变量核心支持库文件,文本型…核心支持库文件全 路径
局部变量打开核心支持库,整数型…打开核心支持库以 便读取数据摘要
局部变量正确核心支持库数据摘要值,文本型,,.自行设 定所用支持库的数据摘要值
核心支持库文件=取运行目录0+"\kmlnfnr"' 通过自身运行目录取核心支持库全路径
打开核心支持库=打开文件(核心支持库文件,#读入,) 核心支持库数据摘要=取数据摘要(读入字节集(打开核 心支持库,取文件长度(打开核J支持库)))'取杨支持库的数 据摘要
誊喜瑟魏夔轻鬟菱
&童ill?2堂旦堕塑!.堕21壁.cn一——/ 正确核心支持库数据摘要值=
I"97c8fe752e354b2945e4c593a87e4a8b'此处为易语言4,03 l正式版中kl-nln.fnr的数据攮要,可自行设定
l关闭文件(打开核心支持库)'释放核心支持库 1.判断开始(核心支持库数据摘要正确核心支持库数据摘 I要值)
Ir数据摘要不正确,可以在此处加入其它一些什么代码,如 l关机,重启或是引入歧途等
l信息框(系统核心支持库已被病毒玻坏,程序将不能运行! I请重新安装程序!,#错误图标,.警告")
I结束0r本例程以结束自身进程为终
1.默认
l信息框(.系统核心支持库通过认证!欢迎使用!",#信息图 I标,.提示")
l,判胄i结零
I返回(o),可以根据您的需要返回任意数值 例程中只是简单的做了一个防止核心支持库被 修改的检查,效果如图9所示(注以上源代码在易 语言4.03正式版+windowsXPSp2下编译通过测 试).在实际运用中可以跟据自己软件的需要编写适 当的代码,当然,也可以选择放弃使用"取硬盘特 征字()命令改用自编代码取特征字.
(文中涉及程序或代码已经收录到杂志配套光 盘"杂志相关"栏目,按文章名查找即可.此程序 和代码~-f--4月20El收录于I',F#VlPT区)仂 适合读者网络爱好者,网民,免费爱好者
前置知识:无
文/图ImAtC
相信大家一定有在网吧上网的经历吧7现在很 多网吧或学校机房为了防止用户修改电脑的设置和 防止中毒,都装了还原精灵.这对我们这些玩家带 来了不便.要是一个软件安装后要求重启,那还怎 么用啊.本着共享的理念.本人写下此文. 今天介绍的是还原精灵6.1版的密码破解方法. 有朋友会说,不是用WinHEX就可以在输入错误密码 的时候在内存中找到密码么7确实,老版本可以, 但对6.1是无效的.因为它的密码不是以明文出现在 内存中.
先准备好工具.O【lyDbg和Peid就够了.还原精
灵61的管理界面是在WindOWS下运行的一个叫 hddgmon.
exe的程序.用Peid查壳,显示为tElock0. 98.如图1所示.
这是个老壳了,下个工具就能解决,要是你想 再温习一下,就手脱吧.不再多说.
使用OD载入脱壳的hddgmon.exe.运行,右下角 图1
出现还原精灵的图标,右键点该图标一还原精灵, 然后输入密码.随便来个123123,点确定,接着 出现一个对话
框,上面写
"正在检查密
码...",如图2
所示.
几秒后!