![](https://img-blog.csdnimg.cn/20210105104856420.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
逆向工程
记录自己学习逆向的方方面面。
AnyStayIsJk
浪费时间的时候想想没有时间的时候 。。。。。。
展开
-
VA转换FileOffset
将VA转换成FileOffset地址,先用VA-400000得到RVA,RVA-RVA所在节的起始地址[虚拟地址](RVA所在节的起始地址通过PEID软件获得),得到偏移地址。通过PEID软件获得获得RVA所在节的起始地址[文件偏移地址]。用这个地址和前面获得的偏移地址相加即可得到最终需要的地址。用HexWorkshop对这个地址进行修改即可。 EXAMPLE:401010(VA)-400000=...原创 2013-09-27 10:53:12 · 1163 阅读 · 0 评论 -
缓冲区溢出的例子
缓冲区攻击1.代码如下:#include<stdio.h>#include<string.h>root (){printf("your have a root!\n");}main (){char passwd[16]; char login[16];printf("login :"); gets(login);printf("passwd:"); gets(passwd)...原创 2013-09-29 09:50:46 · 1646 阅读 · 1 评论 -
两个内部函数体之间的HOOK
#include <iostream>#include <windows.h>using namespace std;typedef void(*pF)(); void test(){ cout<<"this is a pFtest!"<<endl;}void fun(){ cout<<"funfunction!!"&原创 2013-09-27 11:18:04 · 889 阅读 · 0 评论 -
HOOK 系统 API
一调用系统函数 MessageBoxA VCMessageBoxA(NULL,NULL,NULL,MB_OK)CALL dword ptr [0040d244]VC作了优化ASMinvoke MessageBoxA,NULL,NULL,NULL,MB_OKCall 401abc401abc :jmp dword ptr [0040d244]未优化时,函数名代表了jmp dword ptr [00...原创 2013-09-27 11:17:03 · 1133 阅读 · 0 评论 -
逆向虚函数
对象结构体 虚函数表 xxxxx 0x800Jmp sub_xxxxxx xxxxx xxxxx 0x800 0x250Jmp sub_xxxxxx xxxxx 0x800x250 ObjectAD0x20 0x80 虚函数表存在了.rdata节区...原创 2013-09-27 11:15:09 · 639 阅读 · 0 评论 -
自己对栈帧的理解
1 当函数被调用时,系统栈会为这个函数开辟一个新的栈帧,并把它压入栈。当函数返回时,系统栈会弹出该函数所对应的栈帧。 2 ESP总是指向系统栈的顶部,EBP指向的是系统栈最上面一个栈帧的底部,底部存的第一个是ebp,这个ebp是上一个栈帧的底部 栈帧从底到高依次为:ebp(上一个栈帧的底部) ->当前函数的局部变量 ->要调用函数的实参 ->要调用函数的返回地址 3 修改邻接变量...原创 2013-09-27 11:12:14 · 1103 阅读 · 0 评论 -
条件判断 & 循环语句的逆向
【重点:当判断大于&小于时】(根据执行体是否紧贴着跳转指令来判断是那个条件语句) 一:执行体紧贴着跳转指令时,代码中的条件判断都会编译成否决条件的形式,原因如下: 如判断:if (a>5) printf("OK"); 1为真时是让它往下继续执行printf,可是为真的跳转指令都会跳转而不会向下执行,所以才会用否决条件的跳转指令 2这样原本的JG会编译成否决条件的跳转指令,即:JLE...原创 2013-09-27 11:08:01 · 1251 阅读 · 0 评论 -
指针的逆向
指针操作技巧 1 运算时一定要先把地址存入指向单字节指针中,这样指针运算时的+1才是加上一个地址 2要取单字节就将地址存入指向单字节指针中,要取四字节就将地址存入指向四字节的指针中,之后用指针[0]输出即可 3 指针的感觉: 一级指针存了变量 &结构体的地址OnePoint输出变量&结构体的地址OnePoint->Var输出结构体变量的某个成员OnePoint[5]输出变...原创 2013-09-27 11:03:11 · 1106 阅读 · 0 评论 -
逆向for语句
注释:1、ebp减的越多则位置越靠下,结构体中的第一个成员(cpu_num)的位置是最底下的位置,即:ebp-0D4H2、第二个成员cpu_name,字符串所占的14个字节+ 36(9次4字节的填充0的操作) + =cpu_name[50],之后省去了两个地址9E和9D,这样从地址9C开始的4个字节就是cpu_speed(9C+9B+9A+99)3、虽然在堆栈上分配空间是向下扩展的,但是设置数据...原创 2013-09-27 11:00:38 · 886 阅读 · 0 评论 -
二维数组对比一维数组的取值差别是多了一个行偏移的计算
原创 2013-09-27 10:58:58 · 988 阅读 · 0 评论 -
通过寄存器作中转来修改变量的值,因为内存之间无法寻址操作
原创 2013-09-27 10:56:26 · 847 阅读 · 0 评论 -
定位到驱动中的分派函数
计算方法就是用IDA中的数减去38,再除以4即可。注意整个计算过程在十六进制上进行 edx+38就是函数指针数组MajorFunction的第一个数据元素 38h = 38h- 38h = 0 / 4(每个数据元素是一个函数指针,占4个字节) = 0 40h = 40h - 38h= 8h / 4 = 2 44h = 44h - 38h= ch / 4 = 3...原创 2013-09-27 10:54:19 · 690 阅读 · 0 评论 -
CrackMe.exe 解密流程
原创 2013-09-29 09:59:29 · 2923 阅读 · 1 评论