上一页 1 ··· 6 7 8 9 10 11 12 13 14 15 下一页
摘要: .上节说的是单步跟踪法,这节讲的是利用堆栈平衡(ESP定律)来进行脱壳!想必大家都听说过ESP定律这个大名吧!ESP定律运用的就是堆栈平衡原理!一般的加壳软件在执行时,首先要初始化,保存环境(保存各个寄存器的值),一般利用PUSHAD(相当于把eax,ecx,edx,ebx,esp,ebp,esi,edi都压栈),当加壳程序的外壳执行完毕以后,再来恢复各个寄存器的内容,通常会用POPAD(相当与把eax,ecx,edx,ebx,esp,ebp,esi,edi都出栈),通过跨区段的转移来跳到程序的OEP来执行原程序!在脱壳的时候,我们可以根据堆栈平衡来对ESP进行下断,进而快速到达OEP!我们用 阅读全文
posted @ 2013-07-05 00:19 _** 阅读(7950) 评论(0) 推荐(1) 编辑
摘要: 这节我们来讲讲如何寻找一个程序的OEP,即OriginalEntryPoint。一些PE加壳程序在被加密的程序上面加了一个区段(有的壳也会合并区段),当外壳代码执行完毕以后,会跳到程序的本身的代码来执行,所以我们可以依靠跨区段的转移指令来寻找程序的入口点。我们来看看加壳之前的Delphi7.0的程序,用LordPE来打开Delphi7.0程序,我们看到程序的入口点是004C498:看区段,没有任何的新加的区块:我们来看看加了壳的程序的入口点,加过壳的入口点为000629D0:区段变为三个了,很明显,壳将原程序的区段给合并了:加了壳后,首先,各个区段都要被系统映射到内存中,因为现在的入口点是00 阅读全文
posted @ 2013-07-05 00:18 _** 阅读(2856) 评论(0) 推荐(1) 编辑
摘要: 菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即EntryPoint,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向OEP,类似一个壳与程序入口点的“分界线!当我们到达了程序的OEP,我们就需要进行DUMP程序了,那么什么时候去DUMP一个程序呢?这里我引用了fly的一句话!“手动脱壳理想的最佳dump时机是指壳已经把程序代码包括资源等数据全部解密、输入表等数据还原但还未填充系统函数地址、DLL则还未重定位,此时dump出来的文件只需修正OEP、ImportTableRVA等信息即可正常运行完成脱壳。”并不是所有的 阅读全文
posted @ 2013-07-05 00:17 _** 阅读(4044) 评论(0) 推荐(1) 编辑
摘要: 脱壳技术一、基础知识壳的定义:在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了,无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP( 阅读全文
posted @ 2013-07-05 00:16 _** 阅读(2478) 评论(0) 推荐(1) 编辑
摘要: 【文章标题】: UPX脱壳全程分析 【保护方式】: 本地验证 【使用工具】: OllyDBG 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 阅读全文
posted @ 2013-07-05 00:13 _** 阅读(1328) 评论(0) 推荐(0) 编辑
摘要: 本文讲述 MiniGUI 中的对话框和控件编程。首先讲解 MiniGUI 中的控件类和控件实例的关系,并举例说明控件子类化的概念及应用;其次讲解 MiniGUI 对话框的编程技术,包括对话框模板的定义和对话框回调函数的编程;最后解释模态对话框和非模态对话框之间的区别。引言对话框编程是一个快速构建用户界面的技术。通常,我们编写简单的图形用户界面时,可以通过调用 CreateWindow 函数直接创建所有需要的子窗口,即控件。但在图形用户界面比较复杂的情况下,每建立一个控件就调用一次 CreateWindow 函数,并传递许多复杂参数的方法很不可取。主要原因之一,就是程序代码和用来建立控件的数据混 阅读全文
posted @ 2013-01-19 16:37 _** 阅读(920) 评论(0) 推荐(0) 编辑
摘要: 何为指针? 指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。 开始 如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针: int* pNumberOne; int* pNumberTwo; 注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。 现在,让我们把这些指针指向一些实际的值吧: pNumberOne =... 阅读全文
posted @ 2013-01-19 16:34 _** 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 这次我们将会带大家再次回顾一下VC的常用知识,包括得到系统时间日期(使用GetLocalTime)、分离字串等。 1: 得到系统时间日期(使用GetLocalTime) CString sTime,sYear,sMonth,sDay; SYSTEMTIME CurTime; GetLocalTime(&CurTime); sYear.Format("%d年",CurTime.wYear); sMonth.Format("%d月",CurTime.wMonth); sDay.Format("%d日",CurTime.wDay); 阅读全文
posted @ 2013-01-16 03:08 _** 阅读(235) 评论(0) 推荐(0) 编辑
摘要: (1) 如何通过代码获得应用程序主窗口的 指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现。 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED) //使程序最大化. (2) 确定应用程序的路径 Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。 Example: TCHAR exeFullPath[MAX_PATH] // MAX_PATH在API中定义了吧,好象是 128 GetModuleFileName(NULL,exeFullPa... 阅读全文
posted @ 2013-01-16 03:05 _** 阅读(240) 评论(0) 推荐(0) 编辑
摘要: VC调试入门概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的 Configuration中增加调试信息 阅读全文
posted @ 2013-01-16 03:03 _** 阅读(261) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 14 15 下一页