简洁风格的网站模板,济南网站建设企业,采集侠 wordpress,做导航网站赚钱吗ZC: 如何确定被调试程序已经来到了 未加壳的程序中#xff1f; ZC: 视频中是使用判断集中语言的特征 ZC: 我的方法#xff1a;上面的方式 ESP平衡 1、第1课 (1)、单步跟踪#xff08;原则#xff1a;向下的跳转正常F8#xff0c;向上的跳转F4跳过(或者用F2…ZC: 如何确定被调试程序已经来到了 未加壳的程序中 ZC: 视频中是使用判断集中语言的特征 ZC: 我的方法上面的方式 ESP平衡 1、第1课 (1)、单步跟踪原则向下的跳转正常F8向上的跳转F4跳过(或者用F2 达到相同效果) 【930】【05:10】一般来说很大跨度的跳转就跳到OEP了 (2)、ESP定律法【1616】【08:58】 【1733】【09:37】pushad之后设置 硬件访问WORD断点 (3)、2次内存镜像法【2235】【12:23】 【2332】【12:55】找程序段的第1个.rsrc节 -- F2 -- (shift)F9 【2468】【13:41】在地址0x00401000处F2 -- (shift)F9 【2486】【13:45】再单步执行 (4)、一步直达法【2553】【14:10】 该 方法不是上面壳 都可以用的。 一般适用于 绝大部分的UPX壳 和 aspack壳 【2653】【1442】反汇编窗口 -- 右键 -- 查找 -- 命令 (CtrlF)直接查找PUSHAD指令对应的POPAD指令 【2750】【15:15】可选框整个段块(E) 我们一般不勾选它 【2802】【15:33】下断 (F2 和 F4 的方式 都可以)然后接着单步 脱壳的两种方法【1010】【05:35】 OD插件 方式1【1065】【05:55】 方式2【1093】【06:02】 该方式有时会出现假死的现象稍等一会就好了 LoadPE【1171】【06:28】修正镜像大小--完整转存 【1335】【07:23】ImportREC(输入表重建程序) ZC: 貌似 “Import REConstructor v1.6 最终版” 在 Win7x64 环境下按钮“获取输入表”得到的信息不太全... 在XP下 就是OK的... 2、第2课 基础脱壳教程2手脱ASPACK壳 ASPack 2.12 - Alexey Solodovnikov 工具PEID和OD 6种方法脱 方法1单步跟踪 方法2ESP定律 方法3一步直达 【2165】【07:12】这里 直接搜索popad搜到的结果不一定是和开头的pushad是配套的如何判断哪个popad是配套的看下面有没有 大跨度的跳转(ZC: 貌似不太靠谱啊...作为 备用方法吧...) 方法42次内存镜像 方法5模拟跟踪 tc eipxxxxxx 【3000】【10:00】.aspack节 包含SFXimportsrelocations (ZC: 这是啥意思它把 导入表 和 重定位表 都打包了) 【3090】【10:18】tc eip00430000此时 OD的左上角 显示 跟踪两个字说明OD已经在自动跟踪了等一会 就会跳到OD的OEP去了。这个方法比较慢 (ZC: 视频中 没有等待跟踪结束... 他说 等一会 就会跳到OD的OEP去了就算没有跳到OEP也可以继续单步跟) 方法6SFX 【3543】【11:47】OD -- 选项 -- 调试设置 -- SFX --【3678】【12:15】选择块方式跟踪真正入口(不准确)当然 有的要选字节方式跟踪真正入口(很慢) 视具体情况而定 -- OD重载一下 -- OD自动跳到了程序的入口点来到了真正的OEP 【2795】【09:18】方法5 和 方法6 都可以 归类为 模拟跟踪法共同之处 就是让OD自动去查找程序的OEP当然也有不同之处 3、第3课 基础脱壳教程3手脱NSPACK北斗 nSPack 1.3 - North Star/Liu Xing Ping NsPacK V3.7 - LiuXingPing * at GetVersion ESP定律法 单步跟踪法 【1428】【04:45】2次内存镜像法。找不到QQ个性网的.rsrc节找不到.rsrc节就不能用内存镜像法了吗当然不是。 【1580】【05:15】理解PE知识的都知道程序运行过程中 是从上向下开始解压的。我们以前先在.rsrc节下断点然后再在0x00401000处下断点它把资源段解压完毕之后code段当然也已经解压完毕。【1700】【05:40】既然没有找到资源文件∴我们直接在0x00401000处下断点 (ZC: 这个有点跳tong啊...不是应该在code段的下面一个节上下断点然后第2次再在code段[0x00401000处]上下断点的吗)【1745】【05:48】断下来的地方是0x003F0273然后 再来 单步跟。【2020】【06:43】来到壳的出口。【2045】【06:49】来到OEP。 ZC: 这里不理解的点在code节(也就是0x00401000处)下了断点为什么断下来的地方是0x003F0273难道是 壳把代码放置到那边 然后在运行 【2080】【06:55】用模拟跟踪法的话输入tc eip00430000 【2386】【07:57】这个壳(程序nspack 1.3.exe的壳)比较特殊我们还可以使用一种比较巧妙的方法。北斗使用VC写的于是可以直接下这个断点at GetVersion 【2590】【08:38】单步一下。(ZC: 来到用户代码领空后) 向上拉一下发现 这就是OEP ZC: nspack 1.3.exe就是加壳程序它用自己把自己加了一下壳 【2727】【09:05】这种方法一般情况下适合于 北斗3.0以前的壳 【2915】【09:43】PEiD上面也没发现的时候看EP区段 这里是nsp0 也就是nspack 也就是北斗它的EP区段显示为北斗的壳 4、第4课 基础脱壳教程4手脱FSG壳 FSG 2.0 - bart/xt 重点为修复 手动、查找IAT 00425000 77DA6BF0 ADVAPI32.RegCloseKey 00425280 7C838DE8 kernel32.LCMapStringA 【210】【01:10】注意这里的连续3个跳转.【258】【01:25】仔细观察这个无条件跳转脱壳多了 经验多了 就知道 壳作者为了防止被脱壳 不会直接将OEP的地址以明文显示 一般都是放在寄存器中我们运行到这里试一下【350】【01:56】来到OEP ZC: 这里 他锁定JMP的讲解 还是理由不充分应该只是怀疑然后验证一下(大胆假设小心验证)然后 得到结论 这个JMP确实很关键 【550】【03:05】讲授“手动、查找IAT” 【760】【04:13】OD命令d 425210 ZC: 貌似 如果这里键入命令dd 425210的话 只会显示数值而 d 425210 会显示注释(里面是API名字) 。错了两者效果差不多不知有何区别还是说d后面不跟w/c/d等(如dd/dc/dw等)的话默认就是dd? 【870】【04:50】向下拉拉到什么地方呢就是下面全是0的位置 【890】【04:56】拉到这个位置(ZC: 他说要拉到下面全是0的位置但是 这里明显不是 他所说的位置啊...) ZC: 这里 OD中的手动查到的 IAT是这样的那么 用LoadPE查看 加了壳的exe的IAT 是什么样子的呢用LoadPE查看 用LoadPE脱了壳的exe的IAT 是什么样子的呢 【1045】【05:48】importREC1.6中 IAT的大小 的懒惰设置方式直接填入 16进制的 1000。 当然 输入 1000 之后会带来很多的垃圾指针 【1133】【06:17】显示无效函数(ZC: 注意此时显示的 无效指针的ptr为0x7FFFFFFF这样的指针估计就是垃圾指针 应该不可能有这样的指针的 而且还是多个指针都是0x7FFFFFFF)直接“剪切指针” 【1233】【06:50】以后遇到修复完之后 还是无法运行的时候我们可以用这种方法去尝试一下。 【1450】【08:05】(ZC: 前面讲解了 单步跟踪法 和 ESP定律法)这里讲解另一种方法暂且称之为 特殊的ESP定律法(没有遵循 堆栈平衡。ZC: 这样也行) 【1550】【08:35】开始操作 【1600】【08:53】重新来(ZC: ESP: 0x12FFC4--0x47A1E8--0x47A208) 【1640】【0906】看此时的堆栈 ZC: pushad/popad 各个寄存器的顺序是什么 【1755】【09:45】ZC: 反汇编窗口--某条指令处--右键--断点-- 可以设置各种断点 (注意 其中有一个 硬件执行断点)。ZC: 当有时候 F2/F4 都没有效果的时候可以使用这里的设置断点的方式。 ZC: 有时上面的设置断点的方式也不行... 我的情况就是这样弄来弄去 感觉像是在单步执行 而且还会跳到系统代码空间去执行... 很无奈... ZC: 我这里找到另一种方式可以行的通 ZC: dd 指令所在地址--在 数据窗口中设置 硬件执行断点-- (Shift)F9 或者直接设置硬件执行断点 he 指令所在地址 5、第5课 (用9中方法来脱壳) 基础脱壳教程5手脱PECompact2.X的壳 PECompact 2.x - Jeremy Collake 1、单步 2、ESP定律 【578】【03:12】介绍几种 比较特殊的方式问我为什么要这么做我也没法告诉大家... ZC: 我的理解下面的几种 bp api的方式肯定是研究过 这个壳的源码知道这个壳用了这几个api 。 3、BP VirtualFree 【568】【03:38】 SHIFTF9取消断点 ALTF9 这个快捷键是 OD--调试--返回到用户代码(U) 查找 push 8000(特征码) 【750】【04:10】push 8000 这个 特征码我们记住可以以后脱强壳的时候 我们还会用到 【815】【04:30】在反汇编窗口 直接搜索push 8000 运行到这 单步跟 4、BP VirtualFree 【915】【05:05】 两次SHIFTF9 中断后取消断点AltF9返回 单步走。 5、【1100】【06:06】 0040A86D B8 74DE4500 mov eax,qqspirit.0045DE74 bp 0045de74 【1260】【06:59】这里如果我们单步的话程序走到retn程序就跑起来了∴ 我们在retn的下一行设置断点 (ZC: 这个说法有点扯淡吧单步走程序就会跑飞而F2ShiftF9F2 就不会跑飞在OD里面直接运行到所选位置不是一条一条汇编指令执行的有什么特殊是OD的问题 还是 程序里面对单步调试做了处理)(ZC: 根据 “【2330】【12:55】”处的现象这里使用 类似F4的方式 纯粹是 经过N次测试后的结论而非理论分析的结果∵ retn后面的指令 完全有可能不会执行从这里看 没有十足的证据能够证明程序一定会执行retn下面的指令) 6、【1420】【07:52】 bp VirtualAlloc SHIFTF9运行 【1515】【08:25】 取消断点 ALTF9 向下拉看到JMP。运行到这 7、最后一次异常法 【1685】【09:20】 取消所有异常。 2次跑飞。 找SE句柄 转到SE xxxx处 (ZC: 或者 堆栈窗口SE处理程序处--右键--反汇编窗口中跟随) F2 -- ShiftF9 -- F2 【2015】【11:11】CtrlG 0045DE74来到的地址就是 “【1260】【06:59】”处 8、两次内存 【2255】【12:30】ZC: 这里有.rsrc节 【2325】【12:53】第2次在0x00401000处设置断点然后来到的地址也是 “【1260】【06:59】”处 【2330】【12:55】然后我们单步跟 (ZC: 这里又 单步跟 了...然后 转了几下 程序跑飞了...) 【2480】【13:45】ZC: 这里可以看到2次内存断点 就隔了几个指令的位置... 而且 也就是“【1260】【06:59】”处 ZC: 2次内存镜像法每次断下来的指令地址 值得研究一下看看是否符合 我的理解... (经测试查看 这里断下来 实际上效果就相当于内存访问断点被断下来) 9、at GetVersion 【2855】【15:50】 ZC: 利用的是 被加壳程序是 VC程序里面 一般会调用 GetVersion 6、 7、 8、 转载于:https://www.cnblogs.com/debugskill/p/5576511.html