锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
[原创] 某校内CTF比赛逆向四道题的分析

作者: mortalboold  日期:2017-05-09 14:56:18   来源: 本站整理

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

二:easycrack:
0x01:运行程序,please input the right ans,将程序拖到ida里。F5查看伪代码,有很多奇怪的函数,通过OD,IDA动静结合

 

分析一下一些函数的用法。
 
0X02: 通过OD,可以看到其中的sub_4011ea和sub_401064,相当于printf和scanf函数,在IDA中按N修改名字。然后先随便一组数据。


 
0x03 根据OD观察内存变化,可以知道var_9c保存的是输入的值,然后后面的sub_4011BD看返回值eax中值可以看

出这个函数求输入的长度,
var_a0里保存长度,将var_9c改名为input,A0改名为l。
 
0x04 然后var_74置0,后面比较var_74和输入的长度,大于(jge)等于就跳转到右边,否则进入左边。
 
左边的算法不是很清楚是什么操作,百度了一下,是对2去模的优化代码,(详细请

看blog.csdn.net/qq276592716/article/details/6971781)。
0x04:根据前面的优化代码,确定如果var_74是奇数就跳转到右边的操作,否则进入左边。左边有

对var_78与5比较,小于等于才会进入左边的流程,否则就退出了
。  
0x05 因为现在var_74的值是0,所以我们先看左边的操作,通过OD。观察返回值(eax)值得变化,
可知道sub_401136是取字符串的操作,改名为getstring
  
0x06 ,继续往下看,接着是是getstring函数取var_8c的字符串,通过OD观察eax的可以看到取出

的值是mortal,所以var_8c='mortal';
 
0x07:通过上面的分析左边的流程注释如下
 
接下来看流程图可知是,var_78++;var_74++,然后跳转到var_74和长度的比较,继续循环。
0x08:再分析右边的流程。因为左边已经把函数的功能分析完成,所以右边直接可以得出来,是将input的奇数位的数与3异或。
 
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位
 
0x0b 接下来就是讲input[0]与var_70做比较,相同就继续循环,var_74++;不等就把var_7c置0,跳出循环。
往上翻,可以看到var70到var_10有长度为25位的数据,正好与输入位数相同,所以判断是比较的字符串。
 
0x0c :写出逆算法成功解出flag
 
三crackme0x01 这是一道安卓逆向,直接祭出神器JEB反编译查看源码。0x02 :找到mainactivety ,然后按TAB键直接反编译出JAVA代码
 
0x03:逻辑很简单,就是输入的奇数位与sincnuisasher异或,然后奇偶位交换,后与V2的值比较
 
0x03:把代码直接复制到eclipse里,然后把算法反过来,先交换,再异或,然后将其中没有声明的变量声明一下,运行,直接跑出flag.
 

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

0x04然后在IDA直接f5看伪代码
 

  
发现只有四个if比较,就可以确认输入只能为0123之中的数字。0x05 在后面可以看到,v8是一个标志位,如果为真的话,就输入正

确,在v8初始化时0,所以看哪些地方能改变v8的值,使其是个非0值。

 
0x06:在伪代码中,可以看出当getstring(v10)==“X”时,能使的v8为1,再根据汇编代码和OD单步跟,可以发现这个比较里,getstring

是返回var_1c的值,
而var_1c=‘C*......*...****.*.****...*....*.*..**********.*..*....*...*...**.****.*.*...****.*....*.*******..*.***..*.....*.*.."    "***.**.***.*...****....*X..*’
  
V10相当于一个下标。所以getstring的返回值var_1c[v10]=”X”,的时候就是正确的时候。
0x07:v10初始化为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代表左移。
 
然后走到X的位置,路线为222122232211010011100333030011111211011211122332330332223221110011112233。
0x09 :IDA发现提示正确后,还让我们看的清楚一些,后面还有一些函数,点最后一个函数进去(前面两个点过去发现没有

什么实际用处)。在OD中该函数的位置下断点,f9运行到此函数出,单步走。
 
0x0A:找到flag
 
打了这么多能加精吗,,,虽然很菜,哈哈。最后一张图不知道为什么传上来,,,在后面写的时候排版没问题啊,保存

后就变得奇怪了,最后还莫名其妙多了一张图。题目下载:http://pan.baidu.com/s/1hsccBkC

图片9.png (12.04 KB, 下载次数: 3)

 

图片9.png


热门文章
  • 机械革命S1 PRO-02 开机不显示 黑...
  • 联想ThinkPad NM-C641上电掉电点不...
  • 三星一体激光打印机SCX-4521F维修...
  • 通过串口命令查看EMMC擦写次数和判...
  • IIS 8 开启 GZIP压缩来减少网络请求...
  • 索尼kd-49x7500e背光一半暗且闪烁 ...
  • 楼宇对讲门禁读卡异常维修,读卡芯...
  • 新款海信电视机始终停留在开机界面...
  • 常见打印机清零步骤
  • 安装驱动时提示不包含数字签名的解...
  • 共享打印机需要密码的解决方法
  • 图解Windows 7系统快速共享打印机的...
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等