- 博客(35)
- 资源 (46)
- 收藏
- 关注
原创 7. OD-破解收费版限制天数的软件
找到切入点字符串 <unregistered但是about里面依然是未注册信息我们以<Unregistered Veresion>做尝试继续查找字符串查找到字符串下断点后,查看上一个跳转判断,因为如果此跳转不成立将不显示查找的字符串。修改跳转的标志位设置为反破解成功。高级方法(高手)推理:如果自己写程序,肯定有一...
2019-02-28 18:31:47 7674 4
原创 6. OD-去除收费软件次数限制,去除退出软件时弹出的广告(比如可执行5次)
去除软件次数动态库软断点下次会删除,所以要下硬件断点。硬件断点:右键断点->硬件执行查看硬件断点:调试->硬件断点 一直F8,跟到此处,猜测此call功能为返回ax为1,做计数器减1所以我们改此处代码,mov eax,1,把eax值永久改为1.改为 去除关闭软件后的广告暂停,点击广告,弹出K窗口,找到DoModal,用户领...
2019-02-26 15:47:09 1980
原创 5. OD-把限制的功能恢复,把阉割的功能添加(未注册版本,部分功能不可使用的修改)
导入后程序运行F9出现异常, 使用shift+F7/F8/F9来忽略程序异常异常就是程序中的抛异常,比如除数不能为0,对系统有破坏,做异常处理。或者 1. 在弹出程序错误时,提示功能未注册版本限制时,此时地址为0x7xxxxxxx,ret2. 按暂停键3. 点击按钮运行限制功能,界面会停留下来再ret位置,Alt+F9返回用户界面修改,或者点击界面调用者返回上级...
2019-02-26 14:34:29 1551
原创 4. OD-去除烦人的nag窗口(去除提醒用户购买正版的警告窗口)
所有函数返回值均放入eax中扩展修改nop选中语句->右键菜单->二进制->用nop填充 三种方式1. 修改标志位je为jmp2. 扩选判断语句+call,全部改为nop3. 修改MessageBoxA第一个参数为14. 修改PE文件头按M窗口,寻找PE头只有77开始的地址不是正确程序PE头。寻找Addersso...
2019-02-26 12:23:11 1203
原创 3. OD-爆破有钥匙的exe(有验证文件,如KeyFile.dat)
运行程序,得到对话框,需要已个key文件才可以运行。 需要Keyfile.dat文件。z标志位为0,直接结束程序,使用要改变z标志位为1,继续下一步。test一般为判断eax的值是否为0,改变z标志位。 如上图,jnz判断z标志位是否为0,否则又退出程序如下图,使用修改Z标志位为0. xor ebx,ebx 就是...
2019-02-25 19:08:57 926
原创 python import logging日志(日志封装)
创建日志类并使用如何使用python自带的 logging 模块实现日志功能1.初始化一个logger对象1)引入模块import osimport loggingimport sys2)初始化变量,声明logger对象LOG_PATH = 'logs' #设置log路径LOG_FILE = 'text.txt' #设置log文件名#设置根路径为起始......
2019-02-21 23:28:36 14539 1
原创 visual studio运行时库MT、MTd、MD、MDd 的区别
对于MT/MTd,由于连接运行时库是LIBCMT.lib/LIBCMTD.lib,这两个库是静态库,所以此种方式编译的程序,移到另一台机器上面也可以正常运行。但是对于MD/MDd,连接的是动态库,所以如果另一台机器上没有MSVCRT.dll/MSVCRTD.dll时,就提示缺少动态库这样的错误。:MT+DLL,多线程动态库,连接MSVCRT.lib库,这是个导入库,对应动态库为MSVCRT.dll。:mutithread+debug,多线程调试版,连接LIBMITD.lib库。
2019-02-21 13:10:04 1079
原创 2. OD-爆破exe验证程序
设置调试入口点 1. 验证码F8跟踪调试2. 猜测GetDlgItemText函数,或者GetWindowsText函数3. 单步跟踪查看输入的字符串找到地址4. 猜测找到对比strcmp函数5. eax寄存器返回错误为06. je标志位会至1,这里我们把je标志位双击改为0,程序成功破解(或者右键je函数、双击、按空格,菜单点汇编,改为nop)。...
2019-02-21 12:30:17 2148 2
原创 1. OD-界面视图及基本快捷键操作,修改hello word
B:删除断点,空格快速切换禁止/打开K:查看堆栈堆栈调用机制M:搜索字符串C:代码窗口Ctrl+F8 等于 一下一下按F8,如果暂停按F12或者按界面暂停按钮。test al,al ;与比较(and)xor ;异或指令neg ebx ;取ebx补码按减号(-):查看哪个call函数调...
2019-02-21 12:29:41 1691
原创 20.IDA-修改二进制文件、显示修改点
Edit▶Patch Program菜单是GUI版本的IDA的一项隐藏功能,用户需要编辑idagui.cfg配置文件才能激活该菜单。这个文件的第一行是注释,第一行是最初的二进制文件的名称,随后则是文件中被修改的字节列表。每一行都指出被修改的字节的。然后,IDA会将得到的指令字节写入当前的屏幕位置。这个对话框显示了从光标所在位置开始的16个字节的值。你可以更改显示的部分或全部字节。DIF文件是一个纯文本文件,其中列出了一个IDA数据库中所有被修改的字节。用于编辑IDA数据库中的字节值。以及字节在数据库中的。
2019-02-21 12:27:09 2611
原创 19.IDA-栈指针调节、设置函数特性
栈指针调节IDA会尽其所能跟踪函数内每一条指令上的栈指针的变化。IDA跟踪这种变化的准确程度,在很大程度上影响着函数的栈帧布局的准确程度。如果IDA无法确定一条指令是否更改了栈指针,你就需要手动调整栈指针如果一个函数调用了另一个使用stdcall调用约定的函数,就会出现上述情况,这是最简单的一种情况。如果被调用的函数位于IDA无法识别的共享库中(IDA拥有与许多常用库函数的签名和调用约定...
2019-02-21 12:27:01 1294
原创 18.IDA-创建自己的sig(创建自己的标签)
工具flirt68.zippcf.exe/pcf: 生成一个模式文件.patsigmake.exe: 生成一个签名文件.sig流程创建PAT生成pat文件,pat.txt文件说明各个模式的格式。第一部分列举了它所代表的函数的初始字节序列,最长为32个字节。一些字节因为重定位的入口而有所不同,这些字节将得到“补偿”,每个字节以两点显示。。如果一个函数短于32...
2019-02-21 12:26:56 1388
原创 17.IDA-基本块的定义
基本块是一条或数条指令的组合,它拥有唯一一个指向块起始位置的入口点和唯一一个指向块结束位置的退出点,通常,为判定基本块,应忽略函数调用指令并未将控制权转交到当前函数这一事实,除非已知被调用的函数无法正常返回。因此,你可以为每个基本块的第一条指令设置断点,当这些断点被触发时,相关块中的每一条指令都被标记为“已执行”一旦基本块中的第一条指令开始执行,块中的其他指令都会执行,直到最后一条指令。基本块在行为方面有一个重要的特点。
2019-02-21 12:26:49 2132
原创 16.IDA-列出函数中存在的全部call(函数调用窗口,查看函数内调用了哪些call)
窗口的上半部分列出了所有调用当前函数(由打开窗口时光标所在位置决定)的位置。选择View▶Open Subviews▶Function Calls窗口。有时待分析的函数反汇编太长,需要确认此函数调用了哪些call。窗口的下半部分列出了当前函数做出的全部调用。如,查看fopen的反汇编调用。
2019-02-21 12:26:41 2030
原创 15.IDA-查看XREF列表(Ctrl+x)
打开View▶Open Subviews▶Names,只要这里面有的符号名字,如果它们出现在注释中,IDA会将这个符号作为反汇编指令中的一个操作数处理。双击该符号,反汇编窗口将跳转到相应位置。同时,右击该符号,将显示上下文菜单。callflow@@YAXXZ或callflow,使用CTRL+X就可以打开callflow的模态引用框了。在某个位置显示的交叉引用注释的数量由ida.cfg控制,其默认设置为2,当然你可以改变它。使用热键CTRL+X打开一个模态对话框。CTRL+X支持在任意位置打开交叉引用。
2019-02-20 15:02:12 1749
原创 14.IDA-XREF(交叉引用)概述
上处的虚线表示相邻的两条指令之间并不存在普通流(也就是00401048后没有跟着顺序执行的指令)数据交叉引用与IDA数据库中任何牵涉到虚拟地址的字节有关(换言之,数据交叉引用与栈变量毫无关系)指令用于调用函数,如③处的 call指令,它分配到一个调用流(call flow),表示控制权被转交给目标函数。与仅源自于指令位置的读取和写入交叉引用不同,偏移量交叉引用可能源于指令位置或数据位置,例如。普通流表示由一条指令到另一条指令的顺序流。偏移量交叉引用表示引用的是某个位置的地址(而非内容)
2019-02-20 14:56:33 2942 1
原创 13.IDA-显示正确的函数名称(去掉c++后缀命名)
随便看一段IDA的反汇编:C++编译器用于区分重载函数的机制。为了给重载函数生成唯一的名称,编译器用其他字符来修饰函数名称图左就是C++的后缀命名法,图右是正常的函数名字为了显示正常的函数名字,使用Options▶Demangled Names (选项 -> 解码名称)比如,我们选中Names,反汇编将显示为:附如果一个二进制文件使用了后缀命名...
2019-02-20 14:48:24 1560
原创 12.IDA-虚函数和虚表(vf代表虚函数,vf3代表this指向第三个函数)
vtable编译器会为每一个包含虚函数的类(或通过继承得到的子类)生成一个表,其中包含指向类中每一个虚函数的指针,这样的表就叫做虚表(vtable)__vfptr每个包含虚函数的类对象都获得__vfptr指针,并且是对象的第一个数据成员编译器必须要保证虚函数表的指针存在于对象实例中最前面的位置在计算对象的总大小时,也必须考虑到虚表指针。比如new,传递给new的大小值不仅包括类...
2019-02-20 14:43:17 1106
原创 11.IDA-this指针
所有非静态C++成员函数都使用this指针。任何时候调用这样一个函数,this都被初始化,指向用于.最好是把this看成是传递到所有非静态成员函数的第一个隐藏参数.
2019-02-20 14:28:32 712
转载 10.IDA-基本操作
打开IDA,拖拽一个EXE文件进去,首先会弹出窗口:Kernel option1、Kernel option2、Processor option这三个选项会控制反汇编引擎的工作状态,一般按默认即可,大多数情况下,分析选项的默认值在准确性和方便性之间提供一个折中参数,如果IDA分析出有问题的代码时,把Kernel option1中的选项Make final analysis pass选项关闭是很...
2019-02-20 14:11:51 821
原创 9.IDA-重新设置函数类型、创建数组结构
1.重新设置函数类型写一个简单的代码做测试:int fun(int a, double b){ return 0;} int _tmain(int argc, _TCHAR* argv[]){ int c = fun(1, 2); return 0;}release生成,去掉pdb,由于fun内部没有任何操作,所以IDA是无法通过类型传播来得到正确的函数参数...
2019-02-20 14:03:42 3002
原创 8.IDA-数据与代码、函数互相转换
在重新格式化之前,首先必须删除其当前的格式(代码或数据)。在结果上下文菜单中选择Undefine(也可使用Edit▶Undefine命令或热键U),即可取消函数、代码或数据的定义,关键是,必须中间执行Undefine。
2019-02-20 13:22:11 1123
原创 7.IDA-创建结构体
结构体分类结构体的一个显著特点在于,结构体中的数据字段是通过名称访问,而不是像数组那样通过索引访问。不好的是,字段名称被编译器转换成了数字偏移量。结果,在反汇编代码清单中,访问结构体字段的方式看起来与使用常量索引访问数组元素的方式极其相似。注意的是,结构体中有个内存对齐规则,所以不要认为编译器会利用所需的最小空间来分配结构体。默认情况下,编译器会设法将结构体字段与内存地址对齐,以最有效地读...
2019-02-20 13:16:48 1817
原创 6.IDA-重命名、注释
由于基础数据库的本质,你对反汇编代码所做的更改将迅速“扩散”到IDA的所有子窗口中,以使反汇编代码保持一致说明记住,IDA不提供撤销功能。在操纵数据库时,请一定记住这一点。你所能做的,就是经常保存数据库,并恢复到最近保存的数据库版本。
2019-02-19 18:12:16 2309
原创 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索。通过Search▶Text(热键:ALT+T)命令启动文本搜索选择Find all occurences(查找所有结果),IDA将在一个新的窗口中显示搜索结果,最后,使用CTRL+T或Search▶Next Text(Ctrl+T)命令可重复前一项搜索,以找到下一个匹配结果文本搜索不一定准确,如以下汇编(IDA转换的),文本搜索是搜不到的(实际它对应的文字是:吾爱破解汇编指令查询器)
2019-02-19 17:08:15 3823
原创 4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)
使用Jump▶Jump to Address命令或在处于活动状态的反汇编窗口中按下热键G,均可以打开Jump to Address对话框,如果把这个对话框看成Go对话框,可能有助于你记住相关的热键。
2019-02-19 16:57:12 1506
原创 3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口)
在IDA中,ESC键是一个非常有用的热键。在反汇编窗口中,ESC键的作用与Web浏览器的“后退”按钮类似,而在打开的其他窗口中,ESC键用于关闭窗口。1.导出窗口导出窗口列出文件的入口点。这包括程序的执行入口点(在程序的文件头部分指定),以及任何由文件导出给其他文件使用的函数和变量,对于exe来说,至少有一个导出函数,程序的执行入口点。IDA将这个入口点取名为start2.导入窗口...
2019-02-19 16:38:33 7092
原创 2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)
当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶Open Subviews菜单打开反汇编窗口反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具0.在反汇编窗口中,ESC键的作用与Web浏览器的“后退”按钮类似,遗憾的是,在打开的其他窗口中,ESC键用于关闭窗口IDA使用术语流来表示某个指令如何继续执行...
2019-02-19 16:27:34 3611
原创 1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
拖入文件后,会弹出一个加载对话框,如果未识别文件,则默认为Binary File为唯一选项,这时就需要你手动选择反汇编处理器了。当加载后,IDA首先会创建数据库,四个文件(.til、.id0、id1、.nam文件),用来保存各种识别的信息。Pack database(Store): 打包数据库,把上面的四个文件组合成一个IDB文件,如果原来有IDB,将会直接被覆盖。Don't ... : 不打包数据库,也就是不创建IDB文件,但是原来生成的.til、.id0、id1、.nam文件还是会在。
2019-02-19 16:03:12 3754
原创 0.IDA的反汇编算法方式
上面就不会执行inc eax这一句,也就是inc eax这句其实不应该被反汇编的,应该直接从后一句开始,如果不是inc eax,而是一段数据呢,那就OVER了。反汇编器会尝试定位到跳转的目标,但有可能失败(如JMP EAX,EAX在静态环境下无法确认)由于RET返回的地址实际是从栈中取得的,但反汇编器不可能访问到栈,所以就会终止。直接解析它后面的下一条指令,如MOV、PUSH、POP。从起始,逐条反汇编指令,直到完成整个代码段。和无条件分支指令相似,如CALL EAX。一条指令结束,另一条指令开始。
2019-02-19 15:58:45 1044
原创 C++虚函数与纯虚函数用法与区别
2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。8. 实现了纯虚函数的子类,该纯虚函数在子类中就编程了虚函数,子类的子类即孙子类可以覆盖。
2019-02-19 11:49:29 1582
原创 IDA工具各个功能总结
生成文件:保存后生成的文件id0:二叉树数据库id1:文件包含描述每个程序字节的标记nam:包含IDA NAME窗口的数据库til:本地数据库有关信息 导航带颜色 常用菜单ESC键:后退键(避免在窗口标题栏使用,退出窗口) 绿色箭头为YES,红色箭头为NO,蓝色箭头为下一个立即执行的块,拖动线可以改变连接路径。恢复源图形,右键鼠标菜单,点击布局图表。...
2019-02-14 20:12:16 17469 4
原创 32位、64汇编区别
我在VS使用反汇编看到的依然是32位汇编。 1. 寄存器64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用...
2019-02-04 18:43:48 5400
Fortify SCA 20.1.1代码审计
2023-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人