Jarvis OJ 逆向工程部分WP

19 篇文章 0 订阅

RE

1. androideasy

这题我做了一个比较详细(呆)的wp,给个链接:https://blog.csdn.net/qq_42192672/article/details/82528782

2. DD - Android Easy

怎么反编译成JAVA代码的过程第一题已经给出了,就不多做赘述了

分析一下,首先定义一个arryOfByte1数组,每个元素是p数组与q数组每个元素的异或结果,数组长度与p数组长度相等

接下来其实就是构建一个字符串,上脚本

3. stheasy

这题拖到IDA中找main函数,可以看到和flag相关的解释字符串

基本上就是直接输入一个字符串flag,然后操作一波看是否和答案相等,我们换成伪C代码分析

基本也就是两个sub函数在操作,跟进去分析,我自己是选择先看第二个函数,要是答案只和第二个函数有关,那第一个我就不看了

可以看到输入一个字符串,长度是29的话进行变化,否则不变,因为函数的值最后必须返回1,才会输出flag is right,所以必须要在这个函数中执行return 1这个语句,从而直接将1返还给主函数,否则肯定最后会执行return 0

如何才能return 1呢,初步看下来就是字符串s的前28个字符要满足while语句中的那个式子,这里的3u是unsigned int类型,那就是3,接下来我们先看8049B15这块,把里面的每个元素都除以3再减去2

然后s字符串每个字符应该等于8049AE0字符串中对应的不同字符(对应的位数就是刚才求得)

上脚本

OK啦

4. Classical Crackme

题目上说FLAG就是注册码

先把文件尾改成rar,然后解压,可以得到一个exe文件

本来打算用OD找函数断点的,但是打不开,只好拖到IDA了

里面其实挺乱的,什么函数识别的名字都奇奇怪怪,还好不多,慢慢找,找到了这里,看到注册失败什么的,基本能判断这里可能是主函数,注册码应该是现成的,因为找不到操作代码

你找到注册码了么,那个东西长得不像FLAG,base64解密

5. 软件密码破解-1

放到OD里动态看一下

直接搜索字符串来定位,然后慢慢倒回去看

找到这一段,只要失败了就会跳转到“你赢了”的后面(失败),应该是关键

看了一下就是每四个字节减不同的四个字节,把要减的东西排出来:1B,1C,17,46,F4,FD,20,30,B7,0C,8E,7E,78,DE

输入的字符串异或之后要和上面这串数字相等,那么异或回去就好了

找到输入的字符串根据在之前设断电,[eax+ecx]数据窗口跟随就好,发现怎么输,那一块的数据都是一样的,上脚本

但最后还是只能留14位的答案哦

6. Findkey

这题我拿到手里改了一大堆文件尾都无效,最后改成了pyc,感觉还行,就去反编译了一下

给你们网址链接吧,在线反编译:https://tool.lu/pyc/

反编译完就蛮清楚的了,直接运行一遍代码就好了

输入起来很烦就是了

7. Findpass

apk文件,先解压出文件

主要就是比较字符串,相等就行,有一段字符串实从图片读取的,我们在解压出来的assests文件夹中找到图片

底下还有一段代码是用来变形的

好了,第一步反正是把arryOfChar2从图片里面读取出来,我也从来没用python3读取过文件,学一下,最后就是一个关于奇偶的求余数来确定索引,脚本跑一下

但是没对,应该是flag格式问题,加了个flag{}就好了

这里最后其实还有个小问题,就是arrayOfChar1怎么找,我原先使用jg-gui的,并没有找到,但用另一款jeb打开就可以了

8. DD - Hello

二话不说,IDA见

看见里面还有个函数,跟进去看一下,反编译成C,发现只是个printf函数,但是可以发现左边函数栏里面有很多没在main中显示的,逐一查看

看到了Final output is ,猜测关键函数就是这个了,分析一波,操作还蛮简单的,直接脚本

9. 软件密码破解-2

靠字符串在OD里面定位过去

看的有点迷,拖到IDA里看看,发现主函数部分不乏反汇编成C代码,后来在大佬的帮助下,意识到了在第一个函数里修改了子线程之类的,我也看不懂,但是看到类似的以后要警醒,毕竟程序本身被修改了

看到这两句就知道创建线程,并用命令修改了程序本身

我们直接在OD里找WriteProcessMemory的位置,直接Ctrl+N,看函数导入表定位就好

我们可以看到前面有个address参数,基本断定跳到那里去了,我们设断点,然后跟进

我们要做的就是把这块的汇编语句引导到主线程上,搭一个桥过去

当被调试进程执行INT3指令导致一个异常时,调试器就会捕捉这个异常从而停在断点处,然后将断点处的指令恢复成原来的指令

所以一上来地址跳到int3断点,用来恢复代码,那么原先第一次IDA分析主体时,代码必然是乱的,因为没恢复

上面这一段就是要写进去的,可能也不知道是什么指令,但是小端序写入就好,一一对应,不要写多,直接OD里面Ctrl+e改HEX,会自动分析的

修改完文件,重新拖进IDA分析,就很清晰了

这个if的分支看了半天都没觉得有啥用,主要就是输出flag,关键的代码在else分支里面,大家可以自己看一下,就是个异或操作

这里的off_40FEC0跟进去有字符串的

这句话也很关键如果函数结果不是-1就不能输出flag,我们跟进函数看看怎么才能输出-1

那我们就可以确定v9的字符串了

主题大概就是这样,这里to_bytes(4,"little")就是转换成bytes后按小端序输出四位

输出就行了

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值