SinnerDusk 发表于 2020-3-3 18:49

我又来摸鱼了--还是一道XCTF上的题目Reversing-x64Elf-100

萌新记录学习过程
大佬还请绕道
可能以后有事没事会记录一些东西,都是一些基础入门的东西,有想学习的一起啊,可以在下面留言一块讨论问题,一起学习一起进步
前几天看了一下那个公益赛,还是自己太菜了,那些题目几乎都不会写......
要是有大佬打那个比赛了,可以写一下那个的WP
跪求大佬发一下详细的WP
有的大佬发的WP实在是看不懂,可能也和基础太菜有关,有的算法估计给源代码都一时半会都不一定能写出来解密脚本

下面还是看基础简单的吧!我尽可能的讲的详细一点,因为刚入门的时候看什么都是晕的,不过我也是个菜鸡,有什么错误还请大佬指点一下。
使用IDA的常规操作:
F5,然后shift+F12




可以看到程序很短小,也就只能欺负欺负这样的了{:301_1008:}
一般有些程序从字符串中会出现一些猫腻,我们从字符串中发现了Incorrect password!
双击后;

主函数也是十分短小,有一个判断决定了走向,跟进去这个sub_4006FD函数

什么,你问我为什么是八个字符?




字符串自己会在结尾添加一个'\0'作为结束符号啦!
并且这些数据是存放在rodata段的,所以源代码可能是定义了一个全局的二维数组。(大佬们,要是这里错了,可以在下面告诉我一下...)
看懂后就Python脚本了
我先放一下代码(不知道跑版没):
v1 = "Dufhbmf"v2 = "pG`imos"v3 = "ewUglpt"x=""v=["D","u","f","h","b","m","f"],["p","G","`","i","m","o","s"],["e","w","U","g","l","p","t"]#print(v)for i in range(4):    for s in range(3):      t=v      x+=chr(ord(t)-1)print(x)
其实这个代码的作用就是:
现在是三行七列,它是用每一行的第一、三、五、七这四个字符,
因此在数组中就是0、2、4、6
而且它是先把一列遍历完再说下一列的所以让行在内层循环。

还有另外一种方法:
v1 = "Dufhbmf"v2 = "pG`imos"v3 = "ewUglpt"x=""v1=v1+v2+v3for i in range(12):    t=v1[(i%3)*7+(2*int(i/3))]    x+=chr(ord(t)-1)print(x)


这种方法是把二维数组转换为了一维数组,因为没有'\0'作为结尾,所以只用七个字符就可以了。所以代码中有一个*7


最近对于被指针、常量指针、指针常量、指向常量的指针这几个的汇编代码给搞懵了... 有什么有关这方面的好文章可以推荐一下!
有什么问题,可以一起交流啊!
剩下就是夯实基础,勤加练习了!{:301_997:}


SinnerDusk 发表于 2020-3-3 18:53

有什么问题可以直接说一下,一起交流!
可能我回的比较慢,而且还不一定是官方那样正确的...
不过一起讨论进步比较快!

YenKoc 发表于 2020-3-4 13:25

这题上次刚做,就是二维数组,ida伪码可以看出来
页: [1]
查看完整版本: 我又来摸鱼了--还是一道XCTF上的题目Reversing-x64Elf-100