软件脱壳

基础脱壳学习笔记

懵懂的女人 提交于 2020-03-23 13:46:12
参考资料主要来自网络和视频,理解和笔记自己想的 脱壳的步骤有:分析壳类型 → 找到OEP → DUMP脱壳 → 修复EIP 本文记录的是 找到OEP 方面一些理解后的技巧 方法一:单步跟踪法 1.用OD载入,点“不分析代码” 2.单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4) 3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选) 4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现! 5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP 6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入 7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。 理解:单步跟踪法其实主要是脱壳的时候利用F8单步分析,遇到近CALL时候F7跟进,原地循环的时候F4,最后大跳转时候可能就是EIP 主要初级练手学习的思路,也容易理解,壳代码执行过程中会首先解压出以前原始程序的相关资源代码,最后跳到原始程序的入口点(OEP),我们之所以F8就是跳过解压部分。当有时候原地循环一般是释放资源for循环的过程,这不是我们所关心的,我们只关心结果所以就在之后开始运行

脱壳之DUMP数据的原理以及反Dump的方法

我们两清 提交于 2020-01-25 02:07:29
DUMP数据的原理 常见的Dump的软件有LoadPE、PETools等,这类工具在进行Dump数据的时候采用的主要的方式是利用Moudle32Next来获取将要Dump的进程的基本信息。Moudle32Next的原型如下: BOOL Moudle32Next ( HANDLE hSnapshot , LPMODULEENTRY32 lpme ) /*参数具体如下: hSnapshot:之前调用的CreateToolhelp32Snapshot函数返回的快照 lpme 指向MODULEENTRY32结构的指针*/ MODULEENTRY32结构的定义如下: typedef struct tagMODULEENTRY32 { DWORD dwSize ; DWORD th32ModuleID ; DWORD th32ProcessID ; DWORD GlblcntUsage ; DWORD ProccntUsage ; BYTE * modBaseAddr ; DWORD modBaseSize ; HMODULE hModule ; char szModule [ MAX_MODULE_NAME32 + 1 ] ; char szExePath [ MAX_PATH ] ; } MODULEENTRY32 ;

脱壳第一篇(基础知识)

南笙酒味 提交于 2019-12-27 11:02:37
什么是壳 ? 壳的作用是什么? 简单举个例子: 鸡蛋 “ 鸡蛋壳 ” 也是壳,其作用就是保护里面的蛋白和蛋黄。 “ 软件上的壳 ” 本质上就是代码,但是我们形象的称之为壳。其作用就是保护程序,确切的说是隐藏OEP( 原始入口点 ) 在吃鸡蛋的时候,我们要做的第一件事,就是“ 脱壳 ”。 同样的,“ 软件上的壳 ”也是类似的,程序在运行的时候,首先就是运行壳的代码(程序自己给自己脱壳)。 那么怎么辨别软件是否被加了壳? 上面我们简单明了的知道了什么是壳 (本质上就是代码 ),以及壳的作用是什么( 保护程序,隐藏OEP )。那么,如何区分程序有没有被加壳呢? 以VS2017编写的一个控制台程序为例,简单输出一句话。 #include<stdio.h> #include<stdlib.h> int main() { printf("这是VS2017编写的程序,Debug版本\n"); system("pause"); return 0; } 无壳程序 用VS2017编译生成的EXE,默认是没有加壳的;现在我们用PEid查壳工具验证下。 重要信息: EP区段 :. text (即代码段) 连接器版本 :14.16(VS2017) 结果信息栏 :什么都没找到,说明没有壳。(仅针对这个程序而已) 区段信息 :这里的目的是大概知道Debug版本的区段信息是比较多的(VS2017的是9个区段)

脱壳基础篇——常用六操作

[亡魂溺海] 提交于 2019-12-10 04:28:05
本文适合入门级别脱壳选手学习,可以作为方法总结笔记。目录如下: 1.DUMP修复方法 2.ESP定律的本质 3.二次内存镜像方法 4.搜索命令机器码(不断扩展) 5.模拟跟踪之SFX法 6.最后一次异常法 1.DUMP修复方法 在OD中提供两种方式进行脱壳,勾选重建输入表。对于一些简单的壳来说,一般都会直接成功。 可以使用LordPE找到目标PE,修正镜像大小,完整转存两步完事儿。此时DUMP下来的是整个PE在内存中的镜像。接下来使用Import REC修复。 注意这里的OEP要填RVA,修正转储时选中刚才用LordPE从内存中DUMP下来的镜像。 使用x32dbg中的Scylla插件dump修复是比较快捷稳定的。按图中所示进行操作,即可快速从OEP中修复原始程序。 2.ESP定律的本质 ESP定律的本质是在原程序只有ESP寄存器被改变时,(如pushad)设置硬件访问断点。当程序再次恢复保存栈区中的数据值时,引起中断。 在OD中有ESP定律的快捷方法,但是在X32dbg中必须知道它的原理才能成功下断点。 在ESP定律运行之后,要养成清除ESP硬件断点的习惯,不然可能影响后续分析。 3.二次内存镜像方法 首先在PE镜像的第一个.rsrc区段设置访问断点F9,断下来之后再在代码段.text段中设置访问断点F9。单步一会儿就到真正的OEP了。 此种方法适用范围较小。 4.搜索命令机器码

常用软件注册机机器码破解方法及教程

ぃ、小莉子 提交于 2019-12-01 16:24:20
常用软件注册机机器码破解方法及教程 不知不觉,接触软件逆向破解已经N个年头了,从当初的门外汉到小白再到现在略有所成,这个过程只有经历过才知道其中的苦与乐; 有无知、困惑、痛苦、惊喜、彻悟、欣慰……有无助的软件脱壳,茫然的代码分析,有无趣的反复测试; 有人说破解不应该程序员干的事,我回复我不是程序员; 有人说.NET程序太没难度了,去破安卓,后来我真开始研究起安卓来; 虽然很忙,时间少,但每天晚上都要抽些时间来关注逆向开发技术网;虽然并没有从破解中获取物质利益,但我愿意将自己的心得或作品分享给大家。不管怎样,它将作为我的一门兴趣爱好继续发展下去。 本文为详细分析,新手们也可以尝试着做一下。 工具/原料 对象描述: 几年前的一款地图下载软件,现在估计已经没有人使用了; 操作系统: Win7 64位原版(由于笔记本配置太差,虚拟机都没装) 使用工具:de4dot (脱壳).NET Reflector(主要分析工具)、Reflexil(修改,它是.NET Reflector插件)、ILSpy(调试)、VS(辅助分析、写注册机) 免责声明:本教程仅供研究学习; 方法/步骤 1 安装试用去官网下载安装,在帮助文档的说明中,分别说明了共了免费版、标准版、专业版和企业版,其功能与价格成正比。 2 试用,它是试用版,有功能限制,比如下载的等级、数据量大小等,这是一般的商业软件模式。在试用过程中