_readfsq打开word该内存不能为read(0x28u)是什么意思

拿到程序是一个ELF64位程序,让你輸入用户名和密码放入IDA中进行分析主函数


  

首先输入用户名,而用户名的处理在函数4066c0之中进入该函数


  

分析可得该处将字符转换为ASCII码,并苴存储到V13之中
而有关v13的处理函数在函数4018c4,进入该函数


  

将变为ASCII码的数组复制到v8,后执行401362函数

该函数首先将数组8个字符生成的ASCII码即16个字符分成4組接着执行32次循环执行函数40EE2函数,第一次执行时参数为4组ASCII码和一个不知道是啥的数字进入40EE2处函数


  

再将后3个ASCII码和数字异或后执行400D87最后再與a1异或,在进入400D87函数

4个异或后生成的数字分成4组在下图表中执行4次替换重新生成4个8位的字符
最后一步返回是一串比较复杂的加密,其实這便是最后一步应该便是L变换而上面那一串看不懂的数字便是轮密钥,那个字母表便是SM4的S盒确定了加密明文盒加密方式之后便是寻找密钥了,然而密钥处理是第一步便是主函数的401738.

此处将加密之后的ASCII码转换为字符,之后进入400AA6函数

解密出来之后为EF468DBAF985BCF3525AB6再进行SM4解密,由于之前将ASCII碼进行转换为字符串,所以解密时字符串就为其ASCII码
由于前面将字符变为ASCII码在进行两次base16解密可得
用户名badrer12但是还缺少一个密码由于最后的判斷条件ptr+25的值要为0,且前面还有一些函数尚未分析 点开一看为虚拟机指令

和上次DDCTF的虚拟指令分析很像字节码在6090E0处,起初分析了一会儿后来覺得挺复杂的干脆就动态调试看汇编下硬件断点调试过也找到了异或的数据。但是其实虚拟机指令也可以分析

由此可得知prt[0x1a]为计数循环循环输入6次字符,且改变异或的值ptr[0x19]为判断位。判断异或后的值是否位0。

文章所涉及的资料来自互联网整悝和个人总结意在于个人学习和经验汇总,如有什么地方侵权请联系本人删除,谢谢!本文仅用于学习与交流不得用于非法用途!

使用ida64位打开,F5这是基本流程了

看一下这个patch_me方法,需要输入为偶数

再进入get_flag方法发现有效的就是1,45

这里的函数的意思就是隨机进行排列组合,其中会有一个flag

在case5中,对f2进行了一些处理

获得flag在buu提交的时候要使用flag{}格式

文章所涉及的资料来自互联网整悝和个人总结意在于个人学习和经验汇总,如有什么地方侵权请联系本人删除,谢谢!本文仅用于学习与交流不得用于非法用途!

使用ida64位打开,F5这是基本流程了

看一下这个patch_me方法,需要输入为偶数

再进入get_flag方法发现有效的就是1,45

这里的函数的意思就是随机进行排列組合,其中会有一个flag

在case5中,对f2进行了一些处理

获得flag在buu提交的时候要使用flag{}格式

我要回帖

更多关于 打开word该内存不能为read 的文章

 

随机推荐