首页 > 其他分享 >bugku_MagicImageViewer

bugku_MagicImageViewer

时间:2023-02-20 22:12:45浏览次数:56  
标签:bugku key 16 s1 dat MagicImageViewer x00 png

CTF 安卓逆向

MagicImageViewer——png结构+算法

很少做安卓逆向的题目,在此记录一下

先用模拟器看一下

嗯,没啥提示。

jeb打开

关键部分

if(s.length() == 16) //输入的字符串长度为16

String s1 = MainActivity.this.getKey(s); //该方法获得s1,getKey()在native层

Bitmap bitmap0 = MagicImageUtils.readMagicImage(MainActivity.this, "png/encrypt_png.dat", s1);
// MagicImageUtils.readMagicImage是Java层的方法

先看getKey()

关键部分

strcpy(v5, "Welcome_to_sdnisc_2018_By.Zero");

v13[i] = *(v7 + 2 * i) ^ v5[i - 30 * (v9 / 30)];

2*i比较怪,是什么呢?我们查一下JNI的GetStringChars方法,由参考链接1可知它返回的是Unicode格式的char*,所以2字节算一个字符**

v5[i - 30 * (v9 / 30)这个就是v5[i]

就是对输入的字符串进行异或(前16位)

接着看MagicImageUtils.readMagicImage

关键部分

int v1 = inputStream0.read();//读取路径文件
arrayList0.add(Byte.valueOf(((byte)MagicImageUtils.decrypt(v1, ((char)s1.charAt(v % 16))))));
//decrypt() 在native层


也是个异或

接着往下看可以发现,后面生成了图片,也就是对于加密后的图片数据,解密为图片

输入s,s与v5异或得到s1,s1,路径文件异或生成内容转化,图片。
但是png图片的前16位是固定的,所以很容易解出来。

goal = b'\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52' //png图片的前16 位
key_s = 'Welcome_to_sdnisc_2018_By.Zero'
ans = ''

with open('encrypt_png.dat', 'rb') as f:
    dat = f.read(16)
    for i in range(16):
        v = (dat[i] - 1) ^ 0x61 ^ goal[i] ^ ord(key_s[i])
        ans += chr(v)
print(ans)

输出 XaE3*2#@!qV^v+_.

验证:

得到flag。

此时可以更为有趣的写出png(刚开始没想到)
此时

没看懂getKey也能过这题。
作者贴心地提供了一个正常图片的处理函数MagicImageUtils.readImage。

此时会出现dat=0的情况,所以加了验证

goal = b'\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52'


def b(v):
    return v if v >= 0 else 0xff


with open('encrypt_png.dat', 'rb') as f:
    dat = f.read()
    _key = b''
    for i in range(16):
        _key += (b(dat[i] - 1) ^ 0x61 ^ goal[i]).to_bytes(length=1, byteorder='big', signed=False)
    with open('flag.png', 'wb') as f:
        for i in range(len(dat)):
            f.write((b(dat[i] - 1) ^ 0x61 ^ _key[i & 0xf]).to_bytes(length=1, byteorder='big', signed=False))

flag

参考链接:

https://www.cnblogs.com/lijunamneg/archive/2012/12/22/2828891.html
https://www.52pojie.cn//thread-1665541-1-1.html

标签:bugku,key,16,s1,dat,MagicImageViewer,x00,png
From: https://www.cnblogs.com/-Lucky-/p/17139133.html

相关文章

  • bugku xxx二手交易市场
    打开靶场分析很明显需要先注册一个账号才行完成后发现两个上传图片的地方一个是更换头像,一个是发布内容先更换头像试试首先上传一个木马图片,会发现一直转圈圈,(卡......
  • Bugku-不可破译的密码[wp]
    一题目分析flag.txtcipher.txt (1)密码表形式和维吉尼亚密码一样(2)看到504Q0304 很容易想到 504B0304Zip文件头。二解题步骤2.1解密密文根据分析(2)得知和压......
  • Bugku-ez_misc[wp]
     题目描述   1.拿到一份abc.rar文件,里面有一个加密call.png(1)通过file 、binwalk、伪加密一顿小输出都不行,于是放进16进制编辑器查看:文件头不对!(2)修改为后......
  • bugku_EasyMath
    bugku_EasyMath题目描述简单的数学题fromCrypto.Util.numberimportgetPrime,bytes_to_longfromsecretimportflagp=getPrime(2048)q=getPrime(2048)x=......
  • 【BugKu 】【Simple_SSTI_2】
    1. 进入f12,发现并没有什么提示信息,通过{{config.__class__.__init__.__globals__['os'].popen('ls../').read()}}读取系统文件,这里读取网站系统目录,发现存在一些文件......
  • bugku刷题--Crypto
    写在前面其实一开始看到CTF就是在找Crypto的答案,接触到这个比赛也是机缘巧合,所以bugku里面应该先以刷Crypto为主(古典密码真的很好玩啊)0x00抄错的字符其实不能严格意义上......
  • bugku刷题--Web
    0x00 滑稽     入门CTF的第一道题目(也是在CSDN上直接被剧透WriteUp)。     启动场景后是滑稽/滑稽             在谷歌浏......
  • bugku-sodirty
    打开网页,点下注册,然后啥都没有尝试用御剑扫描一些发现www.zip打开网页,会下载到网站源码在纷扰中找到一个文件/routes/index.js,用笔记本打开varexpress=require('......
  • bugku-No one knows regex better than me
    难得开靶场所需要的金币,比完成题目给的少题目源码<?phperror_reporting(0);$zero=$_REQUEST['zero'];$first=$_REQUEST['first'];$second=$zero.$first;if(preg_......
  • bugku-web-wp
    前言刷题平台:bugkuSimple_SSTI_1根据提示使用flag构造payoadflag{ea975f1b437b2290f98feacafb65d30c}GET根据提示get传参what=flagflag{6173e1cf278c7aa09813......