为了能到远方,脚下的每一步都不能少.|

园龄:粉丝:关注:

随笔分类 -  逆向

c++命名粉碎及快速还原
摘要:name mangling跟函数重载紧密相关。mangling就是将参数、命名空间、返回值、调用方式等信息加入函数名中,目的就是为了给重载的函数不同的签名,因此调用函数的时候才好确认。 但是有个问题,vs和gcc使用了不同的命名粉碎规则,我们不可能花大量精力在学习粉碎规则,如何快速还原,其实编译器早
657
0
0
解决ida无法识别printf的缺陷
摘要:现象 最近发现ida居然无法识别vs2019 printf,作为有轻微强迫症的我无法容忍,如下图所示 test.cpp: #include <stdio.h> int main(int argc, char* argv[]) { printf("hello world!"); return 0; }
808
2
1
除法优化有符号-2的幂逆向还原
摘要:现在我们来逐步分析每一条代码的作用 push ecx 这条代码实际上是为了将esp-4,腾出一个局部变量的栈空间 lea eax,dword ptr ss:[esp] 将刚刚增加的栈空间的地址放入eax中 mov dword ptr ss:[esp],0 初始化这个变量 push eax 将变量地址
47
0
0
逆向还原除法有符号非2的幂的第二种优化
摘要:从代码上来看,基本和有符号非2的幂的第一种优化一样,可是0x003F103F处的加法却很奇怪,请注意0x003F1036的乘法是否符号乘法,而它的操作数是一个负数,但是实际上我想要的是一个无符号数,所以0x003F103F处的加法是为了把这个负数变成无符号数。 接下来我们看看它是如何完成这个操作的
53
0
0
关于c++反汇编与逆向分析除法优化推导6和推导7的思考
摘要:关于c++反汇编与逆向分析除法优化推导6和推导7的思考 推导6: a、b均为整数,x为实数 推导7 设有a、b两整数,当b>0时,有 设有a、b两整数,当b<0时,有
68
0
0
有符号非2的幂的第一种优化
摘要:xc=x2nc12n 这样就把除法转换为被除数x乘以一个整数,再右移n位的形式,但是有一个问题,因为右移n位是取下整 右移n位是取下整 例子: ​ -3/2 = 0xFFFFFFFD / 2 =0xFFFFFFFD >> 1 =
65
0
0
为应用程序添加Access=True权限,以防止调试,及破解方法
摘要:修改 Manifest 前往你程序的 App.Manifest 文件,设置 requestedExecutionLevel。 <requestedExecutionLevel level="asInvoker" uiAccess="true" /> 如何创建清单文件请看创建清单文件 给应用程序签名
418
0
0
关于数据的一些思考
摘要:计算机的工作流程归根结底是输入->处理->输出的过程,而数据正是被处理的对象。而数据的考察有以下两点 1.在何处 2.如何解释 我觉得指针就很好的演示了这个道理,指针是由地址和类型组成的,而地址表明了这个数据在何处,数据的属性是什么,数据的作用域是什么? 类型表明了数据是如何解释的,数据的长度和意义
52
0
0
关于有符号整数的一些思考
摘要:1.补码是什么? ​ 计算机存储时,以补码表示负数,例如-1的补码是FFFFFFFF 2.补码如何计算? ​ 因为补码的定义是零减去这个数的绝对值 ​ 例如如-2 == 0-2 == 00000000 - 00000002,零向高位借一位 = FFFFFFFF+1 -00000002 =FFFFFF
127
0
0
逆向工程核心原理:PE映像切换 源代码
摘要:示例代码下载地址:https://pan.baidu.com/s/1cb1qg9YVgzwQ2X9umSU7qw 密码:pnmq Debugme3.cpp #include <Windows.h> #include <stdio.h> #include <tchar.h> #define Modul
228
0
0
window服务调试(二):调试windows服务方法
摘要:调试服务程序的方法有三种 直接设置EIP法 设置循环法 设置JIT法 一、直接设置EIP法 较为简单的服务程序,可以用这个方法,直接启动调试,用调试器设置当前EIP为svcMain的入口,调试功能 二、设置循环法 由于直接调试的服务程序与SCM(Services Control Manager)启动
847
0
0
window服务调试(一):winodw服务运行原理
摘要:window服务调试(一):winodw服务运行原理 windows服务运行主要由三部分构成:安装windows服务 启动windows服务 卸载windows服务 一、安装window服务 安装window服务的原理是获取到SCM(服务控制管理器)的句柄,然后将服务名和该服务的可执行路径写入SCM
395
0
0
关于文本加密解密的破解
摘要:关于文本加密解密的破解 1.首先在与文件相关的API,下断点,如CreateFileW ,记住文件句柄 2.在读取文件的API下断点,Read相关函数,记住读取的长度 3.在读取的内存中下(内存断点或硬件断点)断点 4.即可找到解密的关键点
973
0
0
寻找关键点总汇
摘要:内存断点 字符串搜索 执行探索法(只适合少量代码) run跟踪对比法 消息断点加条件跟踪法 API断点法
80
0
0
Windbg 查看TEB结构体的组成成员
摘要:进入内核调试模式(注入符号文件加载正确) 输入命令:dt ntdll!_TEB 若要详细信息 输入命令:dt -r1 ntdll!_TEB
333
0
0
PE添加TLS的注意事项
摘要:1. TLS目录全部是VA,回调函数地址数组也是VA typedef struct _IMAGE_TLS_DIRECTORY32 { DWORD StartAddressOfRawData; /* tls节区的起始地址 */ DWORD EndAddressOfRawData; /* tls节区的最
184
0
0
ASLR(地址空间布局随机化) 的知识
摘要:1.win7中开启了ASLR功能的程序每次启动时基址都会发生变化,而win10中是每次重启时基址发生变化,(当把这个程序文件复制一份,复制文件的基址也会和原来不一样) 2.只有文件头的charactersistics不设置无重定位节区,和文件头的DllCharactersistics设置动态基址,两
468
0
0
栈帧的作用
摘要:栈帧就是利用EBP(栈帧指针,请注意不是ESP)寄存器访问栈内局部变量、参数、函数返回地址等的手段。 下面通过一个案例呈现: 先编写一个很简单的程序,但是这个程序一定要用到局部变量或参数,详细代码见下图 Test.cpp #include <stdio.h> #include <Windows.h>
145
0
0
X64位系统的函数调用方式
摘要:1.x64系统的调用方式统一使用一种变形的fastcall,即前四个参数在寄存器存储,由函数自己清理,后面的参数由栈存储,由调用者清理。具体存储位置见《逆向工程核心原理》p391 37.1.5 2.虽然前四个参数由寄存器存储,但是栈仍然预留了32个字节的空间。具体预留多少个栈空间由调用者约定,而将寄
446
0
0
修改PE数据加载dll注意事项
摘要:如何加载dll网上有很多资料,我就不赘述了,我分享一下我在练习过程碰到的问题 1.IAT指向的地方不能为空 可能大家觉得IAT的地址是运行时系统赋予的,就指向了一个0字节的位置,但是PE装载器会认为你的IAT已经结束了,会造成这个dll加载失败 其实谁便写点什么都行 2.加载的dll一定要至少有一个
116
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起