Corax的博客

“我想做我能做的事 ”

【技术研究】作用域 生命周期

TEC

定义编号多用字符char型。 任何类型可以转字符型,反过来不见得。 定长字符串,浪费空间,但查找快。 二维数组传参,[] [x]第二个参数必须有。——涉及内存存储格式。 状态机 以信号驱动行为。当遇到什么,怎 么做,遇到另外的什么,怎么做。 对于循环,在编译器优化里,控制循环长度的语句中,在循环体内不涉及改变循环长度的情况下,语句中的内容会外提,(函数除外),因为没有必要每一次...

【160Crackme】《second_crackme》

Crackme

second_crackme 这是我在一个国外crackme平台Crackmes下载的一个cm。 过程不是很难,简单拿来学习一下。 程序下载下来一共四个东西,readme是一个提示。 main.c是源码。用作提示。 readme也是提示 asm文件中囊括了带有核心符号的汇编代码 先不管这些,按照常规的破解思路来做吧。 先exeinfo,无壳64位exe,拿vc...

【技术研究】多维数组 查找方法

TEC

二维数组 多维数组在内存中,本质是特殊的一维数组。 N维数组的元素是N-1维数组。 可以理解为 针对int[5] [8]的一维数组 针对int[8]的二维数组 针对int的三维数组 理解成尺子 写一个简单代码,可以看到二维数组其实在内存中也按照地址从小打大顺序排列。 可以得出公式,可以看出两次下标运算(计算机角度) type ary[N][M] a...

【160Crackme】《Brad Soblesky.1》

Crackme

Brad Soblesky.1 直接exeinfo 没加壳,老VC写的,直接OD 一样的查找字符串 找到这个地方,发现有个关键跳会跳开 回显正确的代码 先爆破它,直接nop掉jnz 成功 再往上分析代码,下断点在cmp之前 运行,因为前一句就是lea ecx,观察ecx 得知就是我们输入除了第一个字符,和这个东西比较,直接复制 ECX 001...

【160Crackme】《Splish》

Crackme

Splish 打开看看 分为两个部分,一个是求Hardcoded,一个写name和serial注册机。 exeinfo查一下信息,无壳,汇编写的。 Hardcoded 直接放进OD里看看,先找hardcoded关键处 往上找,这里上面刚刚调取API获得了输入的文本,下面就比较了,感觉流程并不长,下个断 看起来像一个比较循环,先把jnznop掉看看能不能爆破 ...

【技术研究】数组,内存空间

TEC

常量求值 在编译前 数组 每个元素不考虑对其,也不重叠存放 存放有连续性,一致性。 int ary[5] = {1, 2, 3, 4, 5}; ary 第零个元素的地址常量(常量也就意味着不想变量一样可以自增自减) ary[n] address: 必须一个是整型,一个是地址类型 ​ (int)ary + sizeof(type)*n ary[n] address:...

【技术研究】函数调用,栈细节

TEC

ascii源于电报 换行 \r 本来是纸张前移,x轴不变,y加一 回车 \n 针脚复位,x轴归零,y不变 PC中,不同编译环境不同操作系统对\n有不同理解 ​ 微软的回车 列清零 行加一 等于以前融合的\r\n ​ 仍然有些系统沿用电报系统 函数调用 函数解决问题 解决问题依赖关系 后进先出 ​ 有点像递归的解决路线 计算机结构 栈结构 每个函数有独立栈环境,不同栈环境的...

【160Crackme】《fireworx.2》

Crackme

fireworx.2 exeinfo查一下壳,无壳 用borland写的 打开来看看,字符字样就这样 扔od吧 查字符串,可以看到是明文,直接找到关键字符串。 定位到关键处之后,可以看到这关键跳。 尝试通过nop来爆破他。成功了。 逆一下算法吧。在上面这个地方下个断,因为有很多push,pop做栈堆平衡 两个红框内的算法负责把输入的name和seria...

【安全学习之路】Day49

sec

C与C++的微小差异 C无法在for里面定义 集成开发环境 文本编辑器 编译器 链接器 ctrl+f7 仅编译不链接 调用cl 配置检查等级等 ​ 但/p 等功能仍需要手动输入 ​ /zi生活曾调试信息,/od禁止优化 –Debug核心选项 ​ release优化版本 有体积优化 有速度优化 报了个error 是默认使用预编译头文件的问题,把他勾选 直接f7 编译加...

【安全学习之路】Day48

sec

通配符之间加上19,限制长度防止溢出。 内存布局,可以直接猜出来缓存区大小。 只输入0-9,遇到别的字符直接截断。 遇到除了059a之外截断 不让输入8 不让输入8。 一个错误。 n未初始化,是一个残留值,即给n分配了个区域,之前这个区域是啥东西,未初始化就是什么值。 如果这里的n是个1234,那输入的内存就会存到1234这个地址当中去。因为scanf(“...