为什么我用OllyDbg手动脱壳成功了,文件比没加壳前还大

为什么我用OllyDbg手动脱壳成功了,文件比没加壳前还大,第1张

加壳的算法一般是很悔汪保密的,因为本来就是碧旁仔要维护软件代码安全才加壳的,并且大多还带有压缩算法。

加过壳的程序运行过程如下:

1、文件装载到内存

2、执行解壳程序,把真正的主程序释放出来

3、执行主程序

脱壳就是要把在内存中已经释放出来的主程序,保存为新的文件,从而成为脱壳成功的软件。

但在从内存取数据文件的过程中会把所有与该程序相关的内容以内存中的存放形式全部取出,包括未启游经压缩的资源等等,所以文件会比较大。

破解方式如下:

1、使用Ollydbg,点文件,打开,选择通达信的可执行文件(或者把通达信的执行文件直接拖进Ollydbg的窗口),按F9运行程序。

2、正常使用通达信,进入到K线图后,在k线图(主图或者副图上)点右键,选择指标,然后选择一个加密的公式,点确定。此时公式应该能正确使用并且在图上显示出来。

3、点右键,选当前指标,选修改指标公式,此时需要输入密码,随便输入几个数,但不要点确定。

4、在Ollydbg的左下角,有一个命令编辑框,输入命令bp _mbscmp,回车,这时断点下好了。

5、点修改密码公式框中的确定按钮,此时中断在_mbscmp中,在右上角的ECX的值槐悉就是密码,ECA值是你随便输入的数。

6、找到密码后,点在左上角的红黑色的一行代码,点F2取消断点,再点F9来继续程序执行。可磨档以循环2-6步来得到其他的密码。

*** 瞎明乱作环境:电脑端:macbookpro mos14打开通达信5.30版本

指标指衡量目标的单位或方法。股票指标是属于统计学的范畴,依据一定的数理统计方法,运用一些复杂的计算公式,一切以数据来论证股票趋向、买卖等的分析方法。主要有动量指标、相对强弱指数、随机指数等等。由于以上的分析往往需要一定的电脑软件的支持,所以对于个人实盘买卖交易的投资者,只作为一般了解。但值得一提的是,技术指标分析是国际外汇市场上的职业外汇交易员非常倚重的汇率分析与预测工具。新兴的电子现货市场也有类似一些指标的运用,电子现货之家中有所介绍。

K线

K线图又称蜡烛线、阴阳线或棒线,原来是日本米市商人用来记录米市当中的行情波动,后因其标画方法具有独到之处,因而在股市及期市中被广泛引用。K线将买卖双方力量 的增减与转变过程及实战结果用图形表示出来。经过近百年来的使用与改进,K线理论被投资人广泛接受。

最简单的方法是启动OllyDbg,点击File|Open,然后选择你想调试的程序。程序需要命令行参数输入对话框下方的文本栏。

重新开始调试最后一个程序的快捷键是Ctrl+F2,并且OllyDbg使用相同的参数。

你也可以点选历史记录。把程序拖入OllyDbg也可以开始调试。

当然,当启动OllyDbg时,你在命令行中也能指定被调试的程序名和参数。比如:

你可以创建桌面快捷方式指向OllyDbg,选择属性,到快捷方式,把程序名加入目

标栏。每次你双击这个快捷图标,OllyDbg自动装载被调试程序。

你可以attach OllyDbg到某个正在运行的进程。点击File|Attach,从列表中选择

该进程。注意:当你关闭OllyDbg,这个进程也会终止。不要试图attach系统进程

,这很可能使系统完全死机。(事实上,大多数情况下,OS不允许attach敏感进

程)

OllyDbg能作为just-in-time debugger。这需要在注册表中登记。点击

Options|Just-in-time debugging,在对话框中按“Make OllyDbg just-in-time

debugger”。现在,当一些程序崩溃,你会被询问是否调试它。这样, *** 作系统

可以启动OllyDbg并直接停在异常发生处。如果你选择attaching without

confirmation,OllyDbg不会询问直接启动。要恢复原来的just-in-time

debugger,在出现的对话框中按相应的按纽就行了。

其它方法还有,把OllyDbg加入可执行文件的d出式菜单。点击Options|Add to

Explorer,按“Add OllyDbg to menu in Windows Explorer”。以后你可以右击

可执纳轮行文件点选OllyDbg。这个选项创建注册表键

HKEY_CLASSES_ROOT/exefile/shell/Open with OllyDbg and

HKEY_CLASSES_ROOT/exefile/shell/Open with OllyDbg/command

OllyDbg可以调试控制台(基于文本)程序。

注意:WindowsNT或Windows2000下,你必须有管理员权限

OllyDbg的help-通用快捷键(翻译)

Golbal shortcuts(通用快捷键)

这些快捷键在OllyDbg中通用,不依赖于当前活动窗口。

Ctrl+F2---OllyDbg重置,重新开始调试。如果没有活动程序,OllyDbg装入历史列表中的第一个程序。OllyDbg重置会释放内存移除硬断点。

Alt+F2--关闭被调试的程序。如果程序还在活动状态,你纤塌会被询问是否执行该 *** 作。

F3--显示“Open 32-bit .exe file”对话框,这里可以选择可执行文件和指定参数

Alt+F5--使OllyDbg显示在屏幕最前方。如果被调试程序中断时显示窗口遮住OllyDbg的一些区域,不继续运行又不能移动或最小化它。激活OllyDbg按Alt+F5可以解决。如果你再次按Alt+F5,OllyDbg会恢复为普通窗口。OllyDbg的当前状态显示在状态栏。

F7--step into,执行下一条简单命令。如果该命令是一个函数调用,进入调用函数内部。如果命令有REP前缀,执行该命令的一步 *** 作。

Shift+F7--与F7相同,除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。

Ctrl+F7--animate into,一步一步执行程序,也进入函数调用(就象你一直按着F7,不过更快)。当你执行一些单步或继续命令,程序到达有效断点,一些异常发生时,Animation终止。每步执行,OllyDbg重画所有窗口。要加速animation,关闭所有窗口而不要只改变现有窗口的大小。终止animation,也可按Esc。

F8-step over,执行下一条简单命令。如果该命令是一个函数调用,立刻执行完该函数(除非毁茄圆函数内部有断点或产生异常)如果命令有REP前缀,执行所有重复 *** 作,并停于下一条命令。

Shift+F8--与F8相同,除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。

Ctrl+F8--animate over,一步一步执行程序,但不进入函数调用(就象你一直按着F8,不过更快)。当你执行一些单步或继续命令,程序Animation到达有效断点或异常发生时,Animation终止。每步执行,OllyDbg重画所有窗口。要加速animation,关闭所有窗口而不要只改变现有窗口的大小。终止animation也可按Esc。

F9--继续执行程序。

Shift+F9--与F9相同。除了当被调试程序遇到某些异常时,首先尝试调用程序自己的异常处理过程。

Ctrl+F11--run trace into,一步一步执行程序,要进入函数调用,记录寄存器内容。Run trace 不重绘CPU窗口.

F12-悬挂所有线程以停止程序执行。最好用继续键和菜单命令(像F9)恢复执行线程,而不要用其它手动方法恢复。

Ctrl+F12--run trace over,一步一步执行程序,不进入函数调用,记录寄存器内容。Run trace不重绘CPU窗口。

ESC--如果animation或跟踪正在进行,将被终止。如果CPU窗口显示跟踪时的数据,此时转为显示实际数据。

Alt+B--打开或恢复Breakpoint窗口。这里可以编辑,删除和观察断点。

Alt+C--打开或恢复CPU窗口。

Alt+E--打开或恢复模块列表

Alt+E--打开或恢复Call stack窗口。

Alt+L--打开或恢复Log窗口。

Alt+M--打开或恢复Memory窗口。

Alt+O--打开Option对话框

Ctrl+P--打开Patch窗口。

Ctrl+T--打开Pause run trace对话框

Alt+X-中断OllyDbg。

多数窗口可以使用下列快捷键:

Alt+F3--关闭活动窗口。

Ctrl+F4--关闭活动窗口。

F5--最大化或恢复活动窗口。

F6--激活下一个窗口。

Shift+F6--激活前一个窗口。

F10--打开激活窗口或面板的右键菜单。

LeftArrow--左移一个字符。

Ctrl+LeftArrow--左移一行。

RightArrow--右移一个字符。

Ctrl+RightArrow--右移一行。

OllyDbg的help-分析模块介绍(翻译)

分析

OllyDbg集成了快速超强的代码分析器。装载它,可以用d出式菜单或者CPU窗口

的反汇编栏按Ctrl+A或者在执行模块选“Analyze all modules”。

分析器非常有用。它在数据中分辨代码,标记入口点和jump的目标,辨认switch

tables,ASCII和UNICODE字符串,定位过程、循环、高级switch语句和解码标准

API函数参数(看范例)。OllyDbg的其它部分也广泛用于数据分析。

这怎么可能呢?我稍微介绍一下原理。首先,OllyDbg反汇编代码区所有可能的地

址,记下所有发现的调用及指向的目标。当然,许多这样的调用不正确,但是未

必会有两个错误的调用指向同一条命令,并且三个或三个以上更不可能。这样,

三个或更多调用指向同一地址,我就确信该地址是经常使用的子过程入口。从这

个入口开始,我跟踪所有的跳转和调用,反复 *** 作。这种方法使我99.9%确定所

有命令。然而,某些字节不在这条链中,我采用大约20个更高效的方法(最简单

的如:“MOV [RA],Ra"是无效命令).

过程检测也简单。过程,从分析器的角度看,就是从入口开始的代码的连续区域

,(理论上)可以到达其它命令(除NOP或对齐填充外)。你可以指定三种识别级

。Strict级严格确认一个入口和至少一个出口。heuristical级,分析器尝试确认

入口。如果你选择fuzzy级,或多或少相容的代码区被分离为过程。现代编译器把

过程分成几个部分作公用代码优化。这种情况下,fuzzy级特别有用!然而,误解

的概率也相当高。

类似的,loop是一个封闭的连续命令序列,这里最后的命令跳到开头、一个入口

几个出口。Loop相当于高级 *** 作语言中的do,while和for。OllyDbg能认识任何复

杂的嵌套循环。在反汇编区,他们用长长的大括号标记。如果入口不是循环的第

一条命令,OllyDbg用个小三角形作标记。

实现switch语句,多数编译器把switch变量装入寄存器,然后减去一部分,像下

面代码序列一样:

MOV EDX,<switch variable>

SUB EDX,100

JB DEFAULTCASE

JE CASE100 Case 100

DEC EDX

JNE DEFAULTCASE

... Case 101

这些序列也可能包含一级或两级switch表,直接比较,优化,填充等等。如果你

深入研究比较和跳转树,很难说哪一条命令是某个case语句。OllyDbg为你代劳。

它标记所有的case语句,包括default,甚至尝试猜测case的意思,如'A',

WM_PAINT 或者 EXCEPTION_ACCESS_VIOLATION。如果命令序列不修改寄存器(只

由比较命令构成),那么不大可能是switch语句,但可能是if嵌套:

if (i==0) {...}

else if (i==5) {...}

else if (i==10) {...}

让OllyDbg解码if嵌套为switch,选择Analysis1中相应的选项。

OllyDbg预置超过1900个常用API函数的描述。包括KERNEL32, GDI32, USER32,

ADVAPI32, COMDLG32, SHELL32, VERSION, SHLWAPI, COMCTL32, WINSOCK,

WS2_32 和 MSVCRT。你也可以加入自己的描述。如果分析器遇到已知函数名的调

用(或跳转到该函数),它尝试解码调用跟前的PUSH命令。因此,你可以粗略翻

译该调用的功能。OllyDbg也内置大约400个标准C函数的描述。如果你利用新库,

我建议你分析前先扫描对象文件。这种情况下,OllyDbg也会解码已知的C函数参

数。

如果选项“Guess number of arguments of unknown functions”被设置,分析

器尝试确认调用过程进栈的双字数目,并标记他们为参数Arg1,Arg2等等。注意:

如果有寄存器参数,OllyDbg还是不认识也不包括在上面的统计中。分析器采用了

一个安全的方法。例如,它不分辨无参数过程和返回前用POP恢复寄存器代替舍弃

参数的case语句。然而,能分辨出的函数数目相当多,并非常有助于提高代码的

可读性。

分析器能跟踪寄存器的值。现代优化编译器,特别是面向Pentium的,经常把常量

和地址装入寄存器便于重复使用或减小内存占用空间。如果一些常量装入寄存器

,分析器会注意它,并用于解码函数及其参数。还能执行简单的算术计算跟踪

push和pop命令。

分析器不能区别不同类型的名字。如果你用已有的名字命名一些函数,OllyDbg会

解码所有该地址的调用为原过程。WinMain,DllEntryPoint和WinProc是特殊的预

定义名。你可以使用这些标号标记主程序入口,DLL入口指针和window过程(注意

:OllyDbg不会检查用户定义标号的唯一性)。当然,最好的方法是显示已定义的

参数。

非常不幸,没有一般的规则用于100%的准确分析。有些情况下,例如当模块包含

p-代码或者代码区嵌入大量数据,分析器可能认为部分数据是代码。如果统计分

析显示代码可能被打包或加密,分析器会警告你。如果你想用hit跟踪方式,我建

议你不要用fuzzy分析方式,否则断点被设置在被误认为代码的数据上的几率很高。

自解压文件通常在主体代码外有解压代码。如果你选择SFX选项“Extend code

section to include self-extractor”,OllyDbg会扩大代码区,形式上允许分

析它并跟踪。

OllDbg的一般原理(翻译)部分

我希望你熟悉80x86兼容CPU的内部结构,并且有汇编写程序的经历。我也希望你

熟悉Microsoft Windows.

OllyDbg是一个单进程多线程的“机器代码级”debugger,用于Windows环境下的32位程序。它允许你debug和patch PE格式的可执行程序。OllDbg仅仅使用列入文档的Win32 API调用,所以可用于下一代32位Windows系统。OllDbg看来也可工作于Windows XP,但是我没有详尽的测试,因此不能保证功能完整。

OllyDbg不是面向编译器。它不含特别的规则显示某些情况下特定的编译程序生成哪些代码序列。因此,你可以一样对待任何编译器编译的,或者汇编书写的任何代码。

OllyDbg与被调试的程序同时工作。你可以浏览代码和数据、设置断点、停止或继续线程,甚至运行期修改内存(有时这叫作软调试方式)。当然,如果被请求的 *** 作不是最基本的,OllyDbg就会短时暂停程序,但这对用户透明。有时不在调试状态运行的程序会意外崩溃。OllyDbg,这个“及时”debugger,会指出异常发生的位置。

OllyDbg强烈面向模块。模块这里指启动时加载的或动态加载的主执行文件或动态连接库。在调试区,你可以设置断点,定义新标号和注释汇编语句。当一些模块从内存卸载后,OllyDbg保存这些信息到扩展名为.UDD名字同被调试模块的文件中。下次当装载这些模块时,OllyDbg自动复原所有调试信息,不论程序是否使用这些模块。比如:你调试使用Mydll的程序Myprog1,并且在Mydll中设置一些断点。那么当你调试Myprog2时,也使用Mydll,你会发现所有在Mydll中的断点还在那里,不管Mydll是否装载在不同的位置。

一些调试器把被调试进程的内存视为单个2**32字节区域。OllyDbg做了别的处理方法。内存由几个独立的块组成。任何内存 *** 作都限制于块内。在大多数案例中,这工作优良并且容易调试。但是模块包含几个执行部分等等,你将不能立刻看到整个代码。然而这些例外不常见。

OllyDbg是内存消耗大户。启动时就要分配3MB内存,甚至更多。每次分析,备份,跟踪或文件转储另外再分配。所以当你调试大工程时消耗40或60M内存很正常。

要有效的调试一些无源代码的程序,你首先必须理解它是如何工作的。OllyDbg提供了大量的手段使理解更容易


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12257653.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存