Posts Tagged ‘反汇编’

上次把脚本文件解了出来,不过文件都被加密了,需要推算出加密算法才能编写封包程序。实际上也不难,本质上就是个简单的压缩算法,这次我们来分析一下这一段解压缩的汇编程序。

Read the rest of this entry »

《同级生1》DMM版(即Original版)是2007年3月1日由DMM发行的《同级生》复刻版,似乎DMM发布的elf游戏都采用了新的系统,加密方式和原来的win版有所不同,使用目前网络上流行的游戏文件提取工具(如mlist3等)均无法提取本版本游戏的文件,于是只能手动逆向调试进行文件提取。按照elf游戏的一贯做法,脚本文件都被打包在mes.arc文件中。采用调试器OllyDBG v1.10,操作系统为Windows XP。

关于od的基本使用方法不再赘述,这里只记录主要解密过程。

Read the rest of this entry »

昨晚整理资料,翻出一个自己一年前写的txt,估计是当时自己闲得蛋疼的时候研究的玩意,只记录了实验数据和结论。实验就懒得重现了,只把结果在这记一下吧,供参考。

1、返回类型为结构体
结论:
1、调用函数前,先给返回的结构体预留空间,并把首地址压栈;
2、函数内部利用压栈的首地址设置返回的结构体信息;
3、函数返回值(eax)为压栈的首地址;
4、调用者把返回值(eax)指向的空间存放的结构体拷贝到栈上层的一段空间中;//第一次copy
5、调用者利用栈上层的这段空间存放的结构体信息给变量赋值。//第二次copy

2、形参类型为结构体
结论:
结构体为参数时,仿照压栈的方式,在栈上拉出结构体大小的空间并填充,作为函数参数(相当于将结构体压栈)。

我们知道VC++和gcc都支持naked函数,即所谓的“裸函数”,对于这种函数,编译器不会生成任何函数入口代码和退出代码。这种函数一般应用在与操作系统内核相关的代码中,如中断处理函数、钩子函数等。

VC++的声明语法:__declspec(naked)

gcc的声明语法:__attribute__((naked))

因为编译器不会生成入口代码和退出代码,所以写naked函数的时候要分外小心。进入函数代码时,父函数仅仅会将参数和返回地址压栈,亦即只有esp寄存器和eip寄存器会发生变化。

一般来说,使用naked函数时需要注意以下问题:(以VC++编译器为例)

Read the rest of this entry »

World Line
Time Machine
Online Tools