- 博客(32)
- 收藏
- 关注
原创 关于Reverse之内存转储寻IAT
软件中使用到dll的导入函数的时候,多半使用jmp指令执行API函数。由此,可以使用binary search功能,寻找FF 25,即可快速找到IAT地址。使用ImpREC有时候的智能修复方式并不是很好用,这就需要我们手动寻找IAT的RVA以及size。
2023-09-26 14:53:13
125
原创 PE文件-SectionAlignment
关于SectionAlignment解读:类似于disk区装载到memory区,装载的区域标签必须以整数结尾的意思,例如1000,就意味着只能是[ImageBase]~[ImageBase+1000]的区域可以使用。
2023-09-18 15:23:41
160
原创 反汇编学习——RVAtoRAW
关于《逆向工程核心原理》中notepad.exe的地址转换,在此将思路梳理,并完成练习。计算7604的文件偏移:7604-1000(Imagebase)+400(观察可知,7604位于text区)
2023-09-12 19:00:52
100
原创 反汇编学习——PE文件结构
4.characterristics,标识文件的属性。IMAGE在PE文件中出现,它是“映像”的意思。说明磁盘中的文件和内存中的文件并非完全相同。故将加载到内存中的PE文件加以IMAGE以标识。DOS头,DOS存根,NT头,节区头,节区。(节区又包含text,data,rsrc)节区头由IMAGE_SECTION_HEADER构成。word类型,即一个字,又两个字节构成。dword占据4字节。其中,Rva指磁盘文件地址,Raw指内存文件地址。e_lafnew,nt头的偏移。long类型,占据4字节。
2023-09-12 15:10:58
250
原创 Ollydbg学习
在语句的上一句call函数处设置断点,运行程序,停在了断点处,继续执行程序,发现它返回了00402C17地址,就是需要动手脚处函数的地址。可以确定,我们找到了代码的存放地址。接下来需要确定函数的参数有几个,以便返回正确的栈地址。首先碰到第一个问题:去除所有的Nag。关键在于寻找一个函数代码的起始地址。后续根据书上的示例和自己做的过程仔细对照,发现可以从栈中寻找。图中是正在进入的函数语句,需要寻找它的代码位置。最终可以确定,应该返回4栈地址以跳过函数。改写为retn 4。碰到一个具体的例子,在此记录一下。
2023-09-11 21:43:29
104
原创 汇编转C——学习逆向工程
类似PUSH块表示的是汇编代码块,最后一列表示注释块。代码块中用“|”进行分割,以表示三列。前一二列混在一起,表示地址块和16进制块。本次学习所用案例为abexcm1.exe,如果有需要可以在社区搜索即可。abexcm1.exe是用汇编写出的程序,所以汇编代码非常简洁,开头就能见到函数功能。可知,函数调用参数的顺序和参数入栈的顺序相反。
2023-09-11 10:53:08
1745
1
原创 C++学习之函数
关于函数的返回值问题:某些时候我们希望函数能够返回多个值同时又不希望新定义一个数据类型,那么,就可以使用非常量引用,函数执行完后变量的值就隐式地返回了。定义函数的时候,如果不希望对传入的对象做出改变,可以使用const string修饰符,保证了函数的执行安全。
2023-09-06 14:14:18
42
原创 C++学习之表达式
使用新版强制类型转换:static_cast<type>,避免使用(type)降低代码可读性。++i则返回i自增操作之后的值。如果不必要,尽量不适用i++。因为这是对资源的一种浪费。关于++i和i++的区别:i++返回i原本的值,再进行自增操作;对底层的const类型多加一层const_cast<type>。
2023-09-06 11:08:54
51
原创 C++学习之迭代器和数组
因此,如果仅进行只读操作,则使用cbegin和cend比较保险:因为不管对象的类型是什么,其迭代器返回类型都是const_iterator。关于初始化的问题,string类的数组不论在数组内还是在数组外,统一被初始化为空串。表示一个名为ptr的引用,引用对象为大小为十个元素的数组,其元素类型为int。表示ptr是一个引用,对象为包含十个元素的arr,其类型是int的指针。需要注意的是,end返回的是容器中最后一个元素的后一个位置,本身为空。表示ptr是一个指针,指向有十个元素的数组,数组元素类型是整型。
2023-09-06 10:16:54
109
原创 C++学习
但是,const int *p和int const *p有区别。可以理解为去掉类型修饰符,就近原则从右开始匹配const。即为const int *p中,*p不能被修改;int const *p中,*p不能被修改。而int * const p中,p不能被修改。说到const int和int const,修饰p没有区别。
2023-09-05 19:40:13
69
1
原创 C++ learing
''单引号所括住的内容严格来说是转换成int类型,表示的是单个的字符,而""双引号所括住的内容表示字符串,是char的类型,可以对变量赋“”的值。使用String的过程中,出现了和学习C不一样的地方。同时出现的还有''和""差异问题,记录一下。还有一个命名方法的差异。C++中,可以使用String s1("Clannad");
2023-09-04 15:07:33
69
1
原创 学习C语言
总结,C语言内不能使用.的形式,指针需要用->,且函数声明的形参内必须用*,使用函数的时候应该用&。总结自己的经验,在此开帖。以下代码是做线性表删除x元素操作的。
2022-09-25 13:32:46
300
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人