|
一、概论
壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种
顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。当然加密壳的保护能力要强得多!
二、常见脱壳方法
预备知识
1.PUSHAD (压栈) 代表程序的入口点,
2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近
3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
方法一:单步跟踪法
1.用OD载入,点“不分析代码!”
2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4)
3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
Btw:在有些壳无法向下跟踪的时候,我们可以在附近找到没有实现的大跳转,右键-->“跟随”,然后F2下断,Shift+F9运行停在“跟随”的位置,再取消断点,继续F8单步跟踪。一般情况下可以轻松到达OEP!
方法二:ESP定律法
ESP定理脱壳(ESP在OD的寄存器中,我们只要在命令行下ESP的硬件访问断点,就会一下来到程序的OEP了!)
1.开始就点F8,注意观察OD右上角的寄存器中ESP有没突现(变成红色)。(这只是一般情况下,更确切的说我们选择的ESP值是关键句之后的第一个ESP值)
2.在命令行下:dd XXXXXXXX(指在当前代码中的ESP地址,或者是hr XXXXXXXX),按回车!
3.选中下断的地址,断点--->硬件访--->WORD断点。
4.按一下F9运行程序,直接来到了跳转处,按下F8,到达程序OEP。
方法三:内存镜像法
1:用OD打开软件!
2:点击选项——调试选项——异常,把里面的忽略全部√上!CTRL+F2重载下程序!
3:按ALT+M,打开内存镜象,找到程序的第一个.rsrc.按F2下断点,然后按SHIFT+F9运行到断点,接着再按ALT+M,打开内存镜象,找到程序的第一个.rsrc.上面的.CODE(也就是00401000处),按F2下断点!然后按SHIFT+F9(或者是在没异常情况下按F9),直接到达程序OEP!
方法四:一步到达OEP
1.开始按Ctrl+F,输入:popad(只适合少数壳,包括UPX,ASPACK壳),然后按下F2,F9运行到此处
2.来到大跳转处,点下F8,到达OEP!
方法五:最后一次异常法
1:用OD打开软件
2:点击选项——调试选项——异常,把里面的√全部去掉!CTRL+F2重载下程序
3:一开始程序就是一个跳转,在这里我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数m!
4:CTRL+F2重载程序,按SHIFT+F9(这次按的次数为程序运行的次数m-1次)
5:在OD的右下角我们看见有一个"SE 句柄",这时我们按CTRL+G,输入SE 句柄前的地址!
6:按F2下断点!然后按SHIFT+F9来到断点处!
7:去掉断点,按F8慢慢向下走!
8:到达程序的OEP!
比如说第一次是按10下SHIFT+F9..然后程序就跑起来了..
接着呢..我们从载入程序然后按9下SHIFT+F9
大家都知道按10下程序就跑起来了..所以说9下程序是不可能跑的..
方法六:模拟跟踪法
1:先试运行,跟踪一下程序,看有没有SEH暗桩之类
2:ALT+M打开内存镜像,找到(包含=SFX,imports,relocations)
内存镜像,项目 30
地址=0054B000
大小=00002000 (8192.)
Owner=check 00400000
区段=.aspack
包含=SFX,imports,relocations
类型=Imag 01001002
访问=R
初始访问=RWE
3:地址为0054B000,如是我们在命令行输入tc eip<0054B000,回车,正在跟踪ing。。
Btw:大家在使用这个方法的时候,要理解他是要在怎么样的情况下才可以使用
方法七:“SFX”法
1:设置OD,忽略所有异常,也就是说异常选项卡里面都打上勾
2:切换到SFX选项卡,选择“字节模式跟踪实际入口(速度非常慢)”,确定。
3:重载程序(如果跳出是否“压缩代码?”选择“否”,OD直接到达OEP)
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
jnz->nop
75->90(相应的机器码修改)
jnz -> jmp
75 -> EB(相应的机器码修改)
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)
一条(跳)就死,九筒(90)就胡 (对应上面的2.修改为nop)
一条(跳)就胡,一饼(EB)伺候 (对应上面的1.修改为jmp)
妻死(74)便妻无(75)
爸死(84)便爸无(85)
希望大家互相学习学习,发现现在大家对于破解都不是很了解,很多人想学破解,但是去无从入手,所以在BCG小组大家的商议下,决定为大家写一个破解入门的教程,希望能大家了解破解有一些帮助,希望能有更多的人踏入破解的大门。
1.初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破
中级,追出软件的注册码
高级,写出注册机
2.常用破解工具
(1)侦壳工具:PEID
(2)动静结合的OllyDbg引领破解工具的新潮流。
一,现在我们首先来学习下破解的初步,爆破~
1.侦壳
要破解一个软件首先要做的就是侦壳,要侦壳就要对壳有一定的了解,众所周知,软件作者用编程语言编写好软件后,是将它编译成扩展名为EXE的可执行文件。编译为EXE的目的有两点:
(1)有一些版权信息需要保护起来,不能让别人随意改动,如作者的姓名、软件名称等;
(2)需要给程序“减肥”,从而方便存储、使用和网上传输。
为了编译,会用到一些软件。它们能将可执行文件压缩和对信息加密(图1),实现上述两个功能,这些软件称为加壳软件。为软件加上的东东就称为“壳”。加壳软件不同于一般的WinZIP、WinRAR等打包类压缩软件。加壳软件是压缩可执行文件的,压缩后的文件可以直接运行。
最常见的加壳软件有3个:ASPACK 、UPX、PEcompact。毕竟它们是主流,据统计,用它们加壳的软件约占市面所有软件的90%!其他不常用的加壳软件有ASPROTECT、PETITE 、NEOLITE、TELOCK等。软件最常见的编程语言是Delphi,Visual Basic(简称VB),Visual C++(简称VC)。了解些编程的知识,会让破解更加轻车熟路。
下面来说侦壳,现在比较常用侦壳软件就PeiD,他具有华丽的图形界面。外壳整合(添加到鼠标右键)功能令使用更加方便,支持拖放操作。配置时,务请将“扩展到鼠标右键”打上对号。
其使用方法是,鼠标点住XX.exe,按鼠标右键,选"使用PEid扫描"即可;“壳”的信息就显示在底部。
2.破解工具OD。
关于OD的介绍我把他放到附件里了,这个是看雪论坛的介绍,是比较全面的,至少我觉得比我写的要好,所以大家根据他可以很好的了解OD。
3.爆破实例。
爆破是破解的初步,所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目的。你不明白?呵呵,举个例子好了,比如说某共享软件,它比较用户输入的注册码,如果用户输入的,跟它通过用户名(或其它)算出来的注册码相等的话(也就是说用户输入的注册码正确了),那么它就会跳到注册成功的地方去,否则就跳到出错的地方去。
明白过来了吧,我们只要找到这个跳转指令,把它修改为我们需要的"造型",这样,我们是不是就可以为所欲为了?
一,破解时常用的汇编指令如下,汇编较弱者可先强行背住,以后就可慢慢理解了。
cmp a,b //比较a与b
mov a,b //把b的值送给a,使a=b
ret //返回主程序
nop //无作用,英文"no operation"的简写,意思是"do nothing"(机器码90) (解释:ultraedit打开编辑exe文件时看到90,等同于汇编语句nop)
call //调用子程序,子程序以ret结尾
je 或jz //若相等则跳(机器码74 或0F84)
jne或jnz //若不相等则跳(机器码75或0F85)
jmp //无条件跳(机器码EB)
jb //若小于则跳
ja //若大于则跳
jg //若大于则跳
jge //若大于等于则跳
jl //若小于则跳
jle //若小于等于则跳
pop xx //xx出栈
push xx //xx压栈
更为详细的指令请查阅汇编书籍。
4.破解常见修改,参看表1。
汇编指令修改 相应的机器码修改(通过16进制编辑器实现)
jnz/jne->nop 75->90
jnz/jne -> jmp 75-> EB
jz/je->nop 74->90
jz/je -> jmp 74-> EB
jnz -> jz 75->74 或 0F 85 -> 0F 84
jz -> jnz 74->75 或 0F 84 -> 0F 85
jnz -> jz 75->74 或 0F 85 -> 0F 84
je-> jne 74->75 或 0F 84 -> 0F 85
表1 破解常见修改
(1)修改为jmp(其示意图见图6)
je(jne,jz,jnz) =>jmp相应的机器码为EB (意思是出错信息向上找到的第一个跳转),jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息。例如:
xxxxxxxxxxxx 出错信息,如注册码不对,sorry,未注册版不成功,“Function Not Avaible in Demo”,“Command Not Avaible”或 “Can't save in Shareware/Demo”等,我们希望把它跳过,不让它出现。
……
xxxxxxxxxxxx 正确路线所在,直接跳转到这里。
(图6)
(2)修改为nop(其示意图见图7)
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转),nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处。例如:
xxxxxxxxxxxx 正确信息,如注册成功,谢谢您的支持等,我们希望它不被跳过,让它出现,所以程序一定要顺利来到这里,不能跳转。在OD中,我们一般是把不需要设置NOP,只是把JE或者JNZ改为JNZ或者JE即可,也就是把相等则跳改为不相等则跳,或者不相等则跳改为相等则跳,把跳转过程相反,达到更改程序流程的目的。
……
xxxxxxxxxxxx 出错信息,我们希望不要跳到这里,不让它出现!
(图7)
二,如何快速确定暴破物。
1,确定目标有没有加壳。没有最好了,有的话看是不是常见壳,可不可以用现有脱壳软件快速脱掉。搞不定的话,暂时放弃它。“我吃定你了!”,不要这样,老兄。不就是一壳么,不要和他一般见识。记着,你今天的重点是爆破。不要主次不分、本末倒置,这也是初学者最易犯的错误。
这方面,我用PEID。它可以整合到资源菜单,非常方便。
2,确定用什么语言编写。我的经验是,DELPHI的程序结构清晰、紧凑,最好分析。其次是VC,BC,ASM,比较难的是VB,要有一定的经验才可搞定一两个。
2,在反汇编文件中找到可疑点。
经典语句自不用说,比如,“恭喜”,“注册成功”,“注册码错误”“无效的注册码”,“Thank You","Sorry"...找到后,一般向上不远处就可看到条件转移语句JZ、JNZ、JLE什么的。
事实上,只有极少极少的软件只修改注册判断就OK的。所以我们要把更多的注意力转到其它的可疑点。如未注册标识,过期警告,次数标识,NAG对话框...,熟练使用各种工具的搜索功能是基本功之一。找到后再向上不远处找条件转移语句。
三,如何暴破。
当你找准爆破点后,你会发现有很多种爆破的方法都可以达目的。
1,修改转移语句。
我一般这样改:
不需要跳,我就把JNE改为JE或者把JE改为JNZ
需要跳,我就把JE或者JNZ改为JMP。
这可避免万一你有正确的注册码反而会出错的事情发生。
下面的附件我做了一个关于爆破的视频教程,希望对大家理解爆破有帮助。
4.动态追踪破解技巧-破解经典句式
以下是经典的比较组合,常常是注册码的出现处,所以被称为破解经典句式。
(1)
mov eax,[ ] //这里可以是地址,也可以是其他寄存器或mov eax [ ]。
mov edx,[ ] //同上,通常这两个地址就储存着重要信息或者可以是pop edx。
call XXXXXXXX //关键call。
test eax,eax //eax为标志位。
jz(jnz)或 jne(je) //关键跳转。
(2)
mov eax,[ ] //这里可以是地址,也可以是其他寄存器。
mov edx,[ ] //或是pop edx,通常该地址就储存着重要信息。
call XXXXXXXX //关键call。
jne(je) //关键跳转。
(3)
mov eax,[ ] //这里可以是地址,也可以是其他寄存器
mov edx,[ ] //同上,通常储存着重要信息
cmp eax,edx //关键比较。
jnz(jz) //关键跳转。
OD破解软件
2007-08-20 23:03
大家好,我是散人,这几天我上网大概看了一下,爱好者论坛的内容真的应有尽有,不知道应该写什么了,所以我想了一晚上终于想到了还是教你们些破解知识吧!我想对大家来说都很有用吧!我将会一直坚持下去保证课堂质量,有不会的可以提出来问我,尽量解答(呵呵!我也是鸟嘛!)废话不多说!支持我的就往下看吧!
先教大家一些基础知识,学习破解其实是要和程序打交道的,汇编是破解程序的必备知识,但有可能部分朋友都没有学习过汇编语言,所以我就在这里叫大家一些简单实用的破解语句吧!
----------------------------------------------------------------------------------------------------------------
语句:cmp??? a,b????????? //cmp是比较的意思
!在这里假如a=1,b=2 那么就是a与b比较大小.
????????mova,b????????? //mov是赋值语句,把b的值赋给a.
????????je/jz?????????????? //就是相等就到指定位置(也叫跳转).
????????jne/jnz????????? //不相等就到指定位置.
????????jmp???????????? //无条件跳转.
????????jl/jb??????????? //若小于就跳.
????????ja/jg???????? //若大于就跳.
????????jge????????? //若大于等于就跳.
----------------------------------------------------------------------------------------------------------------------
这些都是我们在以后的课程中会经常遇到的语句,应该记住它们,接下来我们在讲讲破解工具的使用:
我们破解或给软件脱壳最常用的软件就是OD全名叫ODbyDYK界面如图1
它是一个功能很强大的工具,左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值.
右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色突出显示.
cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态.
左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息.
右下角的是当前堆栈情况,还有注释啊.
恩,今天的课程就上到这了,大家可以在自己的电脑下试试OD,了解了解OD,下堂课我将破解一款软件给大家看,我们就用今天讲的语句和OD来破解,在以后的课程里我还会教大家脱壳,因为现在的软件为了维护版权多数都加了壳的,所以要破解就必须脱壳!好了!下节课见!88
OD下载地址:http://fems.ys168.com(我的个人仓库有很多软件,大家有兴趣可以看一下!) -------所罗门宝藏 -------破解工具------ODbyDYK v1.10 12.06.rar 5.1MB
【原创】"白拿"软件破解班(二)
呵呵!大家好!我是散人,我们又见面了!恩,按照上节课说的那样今天来破解个软件给大家看看!大家只要认真看我的操作一定会!假如还是不明白的话提出难点帮你解决,还不行的话加我QQ!有时间给你补节课!呵呵!好!孔子曰:“废话不可多说也”OK!!!~!!!
先讲下预备知识:JZ/JE???? //相等则跳转
??????????????? JNE/JNZ???? //不相等则跳转
??????????????? JMP?????? //无条件跳转
目标柏林:LRC傻瓜编辑器????杀杀杀~~~~~~~~~
简介:本软件可以让你听完一首MP3歌曲,便可编辑完成一首LRC歌词。并且本软件自身还带有MP3音乐播放和LRC歌词播放功能,没注册的软件只能使用15天。
破解步骤(1):我们要想破解一个软件就是修改它的代码,我们要想在这代码的海洋里找到我们破解关键的代码确实很棘手,所以我们必须找到一定的线索,一便我们顺藤摸瓜的找到我们想要的东东,现在的关键问题就是什么样的信息才算是有用的信息呢?要怎么找呢?
1.??在注册软件时如果失败一般会弹出一些类似于“注册失败”,“注册码错误”,“无效的注册码”等信息,正确的话就会显示“注册成功”,“注册码正确,谢谢使用”这样的成功提示,显然它们都可以成为我们破案的线索!在这里我们将它们归纳为“注册提示信息”。如果找不到这些鲜明的字眼的话,我们可以将注意力转移到别的可疑点!如未注册标志,过期警告,次数标识,NAG对话框等等!!!~!~!~!~!~!!
破解步骤(2):如何去找线索呢?好!我们先将LRC傻瓜编辑器放到OD载入(如图1)
现在有两种方法可以查找线索,1。在反汇编窗口中单机鼠标右键,在弹出的菜单中,选择“查找”再点击“所有参考文本字串”。2。是用OD带的插件找线索,依然在反汇编窗口中单击鼠标右键,在弹出的菜单中,选择“Ultra 字符串参考”或是“超级字符串参考”在点击“查找 ASCII”。(如图2)
建议你使用第2种方法,当选择完后,OD会出现一个新的窗口(如图3)。
这里会显示所有找到的字符串,当然“注册提示信息”这些宝贵的线索也就一目了然了!
找到了线索,那么这一节的主要问题“确定修改位置”也就可以解决了!呵呵!厉害吧!后面就到关键了·
好!现在我们已经知道了,我们破解软件的关键位置查找方式大家已经知道了!那么这第三步就是查找这个软件的线索了!
破解步骤(3):现在我们先看一下LRC傻瓜编辑器这个软件,打开,点第2排的问号的图标找注册窗口,同时我们也看见了没有注册的软件只能用15天,任意输入个注册码点注册看看有什么反映,什么反映也没有,大家不要急!想想看我们要输入正确的注册码它还能不提示注册信息吗?基本上是一定显示的!那我们就用脑子先想一下他会提示什么?
好!想好后,我们在用OD载入这个软件,打开字符串参考,虽然内容众多但是还是让我们找到了我们想要的东东!(如图4)
呵呵!看见了吧!恰好是十分经典的注册成功的提示!现在我们说得上是找到线索了!下一步就是“确定修改位置”。
破解步骤(4):现在我们把光标定位到注册码成功提示的这一行代码上,然后双击左键就到这个提示对应的代码处了!(如图5)
这个软件的具体流程是这样的,把我们输入的注册码和正确的注册码相比较,如果不相等就跳转向一个地方,如果相等就弹出“注册成功”的提示!
现在我们看一下这几行代码!(如图6)
是不是和我们想象中的流程一样呢?在“您已经注册”这个提示对应的代码上方有一个跳转“JNZ”,刚好就是“不相等就跳转”的意思(呵呵!聪明人有可能已经想到怎么改了吧?),所以这个跳转非常可疑。先把它假设成我们要修改的位置。在这行的代码处右键打开“汇编”功能(也可以直接双击)。将“JNZ”改成“JZ”呵呵!(如图7,8)
JZ就是相等就跳的意思!现在我们在想一下!如果我们现在修改的代码处就是破解这个软件要修该的代码处的话!那会怎样?我们输入错误的注册码就会注册成功,输入正确的注册码就注册失败!是不是很有意思?
好,修改完毕我们现在就要保存了!保存方法是,在你修改过的代码处,点击右键,选择“复制到可执行文件”,“选择”,然后在弹出的新窗口里那部分代码会被高亮显示,在次使用右键,选择保存到文件就OK !了!(如图9)
好好好!现在我们在看看!看看我们的成果吧!再次打开LRC傻瓜编辑器在注册信息那随便输入个注册码点注册看看!“您已经注册,多谢支持!”呵呵!成功了!哈哈!怎样是不是很有感觉呢?有没有一种黑客的感觉?呵呵!我们在破解这个软件时就用了JNZ和JZ这两个语句!我们把JNZ改成了JZ达到了我们破解软件的目的!对于处学者来说,掌握上面的修改方法就足够了!(一般软件你只要掌握上面的方法基本上就可以破解了!但有壳除外!)呵呵!其实我们不用JZ也可以成功的!而是使用了另一个语句也可完成,并且效果更佳!那么大家就想一想吧!今天的课程就上到这里!呵呵!学习破解是要慢慢来的!不能急的!跟着走就OK的!!呵呵!就到这里吧!下节课我想给大家讲一下脱壳但因为又怕太多,讲不明白,我尽量挑一些简单的脱壳方法讲吧!慢慢来是没问题的!呵呵!88
一、机械码,又称机器码.
ultraedit打开,编辑exe文件时你会看到
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码.
修改程序时必须通过修改机器码来修改exe文件.
二、需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmp a,b 比较a与b
mov a,b 把b的值送给a
ret 返回主程序
nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面
(解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)
call 调用子程序
je 或jz 若相等则跳(机器码74 或0F84)
jne或jnz 若不相等则跳(机器码75或0F85)
jmp 无条件跳(机器码EB)
jb 若小于则跳
ja 若大于则跳
jg 若大于则跳
jge 若大于等于则跳
jl 若小于则跳
jle 若小于等于则跳
pop 出栈
push 压栈
三、常见修改(机器码)
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
jnz->nop
75->90(相应的机器码修改)
jnz -> jmp
75 -> EB(相应的机器码修改)
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情况下,有时,相应的机器码修改)
四、两种不同情况的不同修改方法
1.修改为jmp
je(jne,jz,jnz) =>jmp相应的机器码EB (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)
xxxxxxxxxxxx 正确路线所在
2.修改为nop
je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转) nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处
xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)
xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)
五、爆破无敌口诀 背会此口诀,天下无敌,以后慢慢琢磨,仔细体会,收益多多。如此好的口诀,不要错过
一条(跳)就死,九筒(90)就胡?? (对应上面的2.修改为nop)
一条(跳)就胡,一饼(EB)伺候?? (对应上面的1.修改为jmp)
妻死(74)便妻无 |
|