吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17166|回复: 45
收起左侧

[CTF] 某校内CTF比赛逆向四道题的分析

  [复制链接]
mortalboold 发表于 2017-5-9 01:15
本帖最后由 mortalboold 于 2017-5-9 18:59 编辑

一:签到题0x01:运行程序,显示flag就在这儿,直接IDA打开,进入main函数F5查看伪代码。
图片1.png
0x02:看到一串奇怪的字符串,并且v10和这段字符串有操作,后面if语句有v10,我们试着将这个字符串输入程序中运行,出现如下结果。
图片2.png
0x03:说明这串字符串就是正确的输入,然后根据字符串的特征可以看出是base64加密的。随便百度一个base64在线解密,顺利解出flag。
图片3.png

二:easycrack:
0x01:运行程序,please input the right ans,将程序拖到ida里。F5查看伪代码,有很多奇怪的函数,通过OD,IDA动静结合分析一下一些函数的用法。
图片4.png
0X02: 通过OD,可以看到其中的sub_4011easub_401064,相当于printfscanf函数,在IDA中按N修改名字。然后先随便一组数据。


图片5.png
0x03 根据OD观察内存变化,可以知道var_9c保存的是输入的值,然后后面的sub_4011BD看返回值eax中值可以看出这个函数求输入的长度,
var_a0里保存长度,将var_9c改名为input,A0改名为l。
图片6.png
0x04 然后var_740,后面比较var_74和输入的长度,大于(jge)等于就跳转到右边,否则进入左边。
图片7.png
左边的算法不是很清楚是什么操作,百度了一下,是对2去模的优化代码,(详细请看blog.csdn.net/qq276592716/article/details/6971781)。
0x04:根据前面的优化代码,确定如果var_74是奇数就跳转到右边的操作,否则进入左边。左边有对var_78与5比较,小于等于才会进入左边的流程,否则就退出了
图片8.png
0x05 因为现在var_74的值是0,所以我们先看左边的操作,通过OD。观察返回值(eax)值得变化,
可知道sub_401136是取字符串的操作,改名为getstring
图片32.png 图片33.png
0x06 ,继续往下看,接着是是getstring函数取var_8c的字符串,通过OD观察eax的可以看到取出的值是mortal,所以var_8c='mortal';
图片10.png
0x07:通过上面的分析左边的流程注释如下
图片11.png
接下来看流程图可知是,var_78++;var_74++,然后跳转到var_74和长度的比较,继续循环。
0x08:再分析右边的流程。因为左边已经把函数的功能分析完成,所以右边直接可以得出来,是将input的奇数位的数与3异或。
图片12.png
0x09;根据上面的分析,可以写出对input进行操作的伪代码i=0
x=0
str='mortal'
l=len(input)
for(i=0;i<len;i++)
{     if(i%2)
{         input=input^3}
      else{   
         f(x>5)      
            break;   
          input=input^str[x]  
          x++}}
0x0A:接下来就是看最后的比较了。首先var_74置0,与长度比较,大于就跳出循环,否则长度与25比较,不相等退出循环,根据这里能退出输入的长度为25位
图片13.png
0x0b 接下来就是讲input[0]与var_70做比较,相同就继续循环,var_74++;不等就把var_7c置0,跳出循环。
往上翻,可以看到var70到var_10有长度为25位的数据,正好与输入位数相同,所以判断是比较的字符串。
图片14.png
0x0c :写出逆算法成功解出flag
图片15.png
crackme0x01 这是一道安卓逆向,直接祭出神器JEB反编译查看源码。0x02 :找到mainactivety ,然后按TAB键直接反编译出JAVA代码
图片16.png
0x03:逻辑很简单,就是输入的奇数位与sincnuisasher异或,然后奇偶位交换,后与V2的值比较
图片17.png
0x03:把代码直接复制到eclipse里,然后把算法反过来,先交换,再异或,然后将其中没有声明的变量声明一下,运行,直接跑出flag.
图片18.png

:way0x01 od,ida载入程序
0x02 和第二题一样,继续用OD找出其中奇怪的函数的作用。 一样的首先找出了printf40120d,scanf(401064)函数,
IDA中改名,然后随便输入1234567890,继续在OD里面单步(F8)跟
. 图片19.png
0x03 根据返回值,可以判断4011fe是算输入的长度,然后送入var_38
图片20.png 图片21.png
然后401145根据返回值可以知道也是个getstringVar_2c保存的输入的值,改名为input

0x04然后在IDA直接f5看伪代码
图片23.png 图片24.png 图片25.png 图片22.png
发现只有四个if比较,就可以确认输入只能为0123之中的数字。0x05 在后面可以看到,v8是一个标志位,如果为真的话,就输入正确,在v8初始化时0,所以看哪些地方能改变v8的值,使其是个非0值。

图片26.png
0x06:在伪代码中,可以看出当getstring(v10)==X”时,能使的v81,再根据汇编代码和OD单步跟,可以发现这个比较里,getstring是返回var_1c的值,
var_1c=C*......*...****.*.****...*....*.*..**********.*..*....*...*...**.****.*.*...****.*....*.*******..*.***..*.....*.*.."    "***.**.***.*...****....*X..*
图片27.png 图片28.png
V10相当于一个下标。所以getstring的返回值var_1c[v10]=”X”,的时候就是正确的时候。
0x07v10初始化为0 ,而var_1c[72]才是‘x’,所以要找到v10的变化方式,通过伪代码可以看到,
当输入为0时,v10=v10-16,input=1时,v10=v10+1;Input=2时,v10=v10+16,input=3时,v10=v10-1;但是如果var+1c[v10]==”*”就会退出循环,
v8还是为0
0x08:这是可以将var_1c看成是9*16的一个矩阵地图,如图。每行16元素,输入0,相当于向上移,1等于右移,2代表向下移,3代表左移。
图片30.png
然后走到X的位置,路线为222122232211010011100333030011111211011211122332330332223221110011112233
0x09 IDA发现提示正确后,还让我们看的清楚一些,后面还有一些函数,点最后一个函数进去(前面两个点过去发现没有什么实际用处)。在OD中该函数的位置下断点,f9运行到此函数出,单步走。
图片31.png
0x0A:找到flag
图片34.png
打了这么多能加精吗,,,虽然很菜,哈哈。最后一张图不知道为什么传上来,,,在后面写的时候排版没问题啊,保存后就变得奇怪了,最后还莫名其妙多了一张图。

题目下载:http://pan.baidu.com/s/1skKjupR
图片9.png

免费评分

参与人数 20威望 +2 吾爱币 +30 热心值 +17 收起 理由
52lxw + 1 + 1 用心讨论,共获提升!
土木朽且陋 + 1 + 1 我很赞同!
Kage + 1 谢谢@Thanks!
Git_man + 1 + 1 我很赞同!
黄大帅 + 1 666,两种工具的完美运用
juanmao0755 + 1 + 1 谢谢@Thanks!
ryan515 + 1 + 1 热心回复!
小2b + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
0xxx + 1 求最后一题way.rar,压缩包是快捷方式
soyiC + 2 + 1 热心回复!
夏雨微凉 + 1 + 1 热心回复!
Hmily + 2 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
冷亦寒008 + 1 + 1 谢谢@Thanks!
giantbranch + 1 + 1 已答复!
liphily + 1 + 1 鼓励转贴优秀软件安全工具和文档!
jasoon + 1 + 1 谢谢@Thanks!
xiaofengzi + 1 + 1 用心讨论,共获提升!
secflow + 1 + 1 谢谢@Thanks!
强哥945 + 1 + 1 还以为是cf
挥汗如雨 + 1 + 1 楼主可以把题目链接放上去

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhangjianfei 发表于 2017-5-9 09:44
研究一下
晓我琴宝贝 发表于 2017-5-10 10:08
mortalboold 发表于 2017-5-9 22:26
IDA f5后那几个连着的if语句里,那些数字你用鼠标点在上面,按r,就会变成char型,其中48就是*

*不是十六进制的2A,十进制的42吗
 楼主| mortalboold 发表于 2017-5-9 01:23
 楼主| mortalboold 发表于 2017-5-9 01:31 来自手机
多了一张奇怪的图片
DJ小良 发表于 2017-5-9 02:24
可以呀 楼主66的
sdaza 发表于 2017-5-9 06:35 来自手机
研究一下
咸鱼干大翻身 发表于 2017-5-9 08:11
楼主可以把题目链接放上去
SN1t2lO 发表于 2017-5-9 08:47
题目是好题,排版看着真心累
强哥945 发表于 2017-5-9 08:57
看成cf的来这打卡
secflow 发表于 2017-5-9 09:04
感谢楼主分享,研究一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 00:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表