6.字符串操作类
LEN :获得字符串长度
FIND :从指定地址开始在内存中查找指定的内容
FINDOP :从指定地址开始查找指定一个指令,这个指令是以指定内容为开始的
FINDMEM :全内存中查找指定的内容
ATOI :转换一个字符到整数,返回结果保存到保留变量$RESULT中
ITOA :字符串进制转换
EVAL :计算含义变量的表达式
EXEC/ENDE :对当前调试进程,执行在EXEC和ENDE之间的指令
FILL :从指定地址处,填充指定长度的值
REPL :在指定地址开始,在指定长度字节内,用“替换字符串”替换“查找字符串”
SCMP :比较字符串,目的和源比
SCMPI :比较字符串,只不过是源和目的比
PREOP :获得当前地址的汇编指令
REF :交叉参考
OPCODE :反汇编当前指令
这里是一个很强技术概念类的类,为什么这样说呢?因为完全靠系统信息来定位断点是远远不够的,那么我们必须寻找程序内的"特征代码串",这个和杀病毒软件是一个概念,杀病毒软件是怎么干活的??就是搜索内存,找各个程序的可疑的"特征字符串或者特征码".和人的DNA一样,各个程序的DNA是不同的但又有相同的地方这就是亲子鉴定中心赚钱的秘方 :).
从逆向角度来说,某个系列的加壳,加密软件它有它的一贯性,因为它的开发架构已经定死了,除非它大规模推倒从来.这里我就自己创造一个叫法叫"程序的DNA"吧,这个不是我提出来的,很多大侠早就提出了这个概念,比如FLY的"特定码",OPcode其实就那么多,但是就是这些,简简单单的OPcode就组成了千千万万的程序,但有些东西是具有一贯性的,这个和生物学上的遗传概念一模一样.药剂学上有一个东西叫生物试剂,就是利用生物的特定DNA来检测的.
一旦我们找到某个"程序的DNA",那么很多东西就简单多了,大侠级别的就是"程序DNA试剂工厂",他们能够通过他们长年累月的积累总结出了大量的"程序DNA特征"检测手段,并且能够敏感的捕捉到新的"程序DNA特征",这些才是逆向水平高低的所在. 为什么呢会这样呢?因为程序必须某时某刻要干某件事,这就注定了它的死结,大侠们能一眼就看明白这段OPcode它是在干什么(这需要长年累月的积累),你要动态解码,那么你解码的一小节就是你的命门,你要ANTi,你anti前必须做准备工作,这个准备工作就是命门等等诸如此类.你要干什么,我就在你要干什么前定位你的"特征码",在你干什么前把你的手段给残废了(大侠们够残忍了吧?呜~~~我的ANTI,我的解码) 这就是矛和盾永远可以斗争的地方,我anti你,你定位我的ANTI,好,那么我要动态解码后才ANTI,大侠就盯上你的动态解码的回写内存,我把我动态解码一段花了,那么,我用花特征分离出你的花.......
..逆向反ANTI的手段就是在你动手前我先动手!!!!这叫先发制人,一招快,招招快!!!!可怜程序它必须按照列车时刻表来跑,最搞笑的是脱壳领域,有的大侠懒得理哪些大规模的ANTi了不费哪个劲脱你了,就干脆写个小东西Loader带跑.穿透壳后用特征码一步步定位后patch掉,何必处处脱呢........
这里,我说了一通,大家可以看图一,第20行命令find eip,#fe??0f84#, 这个句话的含义就是寻找特征字符串fe??0f84,而这个特征字符串是什么含义呢,??代表的是可以是Hex任何数, 说明被2.0版FSG保护程序在第一次运行系统函数LoadlibraryA后,从这里取出ESP指针所指的内存地址,下断点后,就会出现了这个特征字符.这个是2.0版特有的.大侠们发现了它的这个特征码.它出一定会出现在被FSG2.0保护程序经过上面运行步骤后的某个内存地址中.
大家是不是有点豁然开朗的感觉??
我们来分析一下轰动一时的特征串:
00B2C27C 68 A78FC31F PUSH 1FC38FA7
f9,改eip
00B7266A CALL 00B7267C
68A78FC31F就是在程序还没有启动运行的时候,就存在的一个特征字符串,它存在于加载到内存后的地址00b2c27c上,大侠发现了它的这个BUG,就是在00b2c27c处,直接将列车扳道岔到00b7266a上,火车一下子变轨到b7266a处,从而跳过了themida的验证.
我们用脚本来实现这个思想是什么样的?
var bugaddress1
var bugaddress2
find eip,#68A78FC31F# //查找<特征字符串>
mov bugadr1,$RESULT //保存查找到的地址
bphws bugaddress1,"x" //给bugaddress1处信号灯传感器系统下命令(断点)
run //列车放行,会被bugaddress1处的信号系统命令停下来
bchwc bugaddress1 //信号灯系统复位,但列车还是停在原位等待放行 :)
mov bugaddress2,b7266a //将b7266a的地址给变量
mov eip,bugaddress2 //扳轨改变列车时刻表,从bugaddress1-bugaddress2处的
//所有站点都不过了,直接走近道到bugaddress2.
//这下这些站点的"乘客"们傻眼了,被脚本指挥的列车拒载了.
esto //列车放行
这个特征字符串仅仅存在于themida的1.3.3.0中,而不是全系列的themida的特征字符串,但是这个思想只要有了就容易了,可你是否具备了一眼就能从全系列themida中利用它的这个思想来定位它的<特征字符串>的能力,那就需要你不断的加强你的功力了.其实1.3.3.0爆出这个BUG,各路大侠马上行动,先从1.3.3.0版本中定位b2c27c和00b7266a地址处上下文中有什么可以进行再定位的地方,其实这就是这个系列的DNA指纹.从而一代枭雄轰然倒地!而上面的脚本的bugaddress1,和bugaddress2就是大侠们利用ODbgScript来进行反复搜索的利器.
| 另类破解鸽子连接密码 | 03-21 | |
| 教菜鸟写注册机 | 12-27 | |
| QQ聊天记录察看器 5.2算法分析 | 12-04 | |
| 如何汉化一个软件 | 12-02 | |
| 扭曲变换加密 【目前防止软件被破 | 11-02 | |
| 破解利器Olldbg脚本教学(二)- | 10-31 | |
| 破解利器Olldbg脚本教学(一)- | 10-30 | |
| 破解|利器|ollydbg|教学|Run tra | 10-28 | |
| 破解WebEasyMail v3.6.2.1 企业版 | 10-24 | |
| 破解利器OllyDBG入门系列(五)- | 10-18 | |
| 破解利器OllyDBG入门系列(四)- | 10-17 | |
| 揭开高级游戏黑客的面纱,轻松打 | 10-17 | |