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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 905|回复: 8
收起左侧

[CTF] 吾爱破解2024解题领红包之新手思维过程记录

[复制链接]
jackyyue_cn 发表于 2024-2-25 11:14
本帖最后由 jackyyue_cn 于 2024-2-27 20:01 编辑

【前言】

每年的春节解题领红包活动都会令人兴奋,并且认真参与会学习到不少东西。
尤其是翻看大佬们的教程,简直是一个不断哇塞的过程。

但如果作为像我一样技术和知识储备不那么丰富的新手,从思维和手段上可能和大佬不太一样。
因此记录本过程,以便找到和大佬的差距,进一步学习提升。

【02-Windows初级题】
经过去年做题的经验和学习后总结:拿到EXE先查脱壳和固定基址
然后找字符串关键词下断点,一步步调试分析后知道大致方向了,还可以对相关函数下断电

EXE文件直接用DiE查看一下,无壳无加密,32位
StudyPE+打开,动态基址,直接点击“固定PE基址”后另存

运行一下,随便输入一下,提示“Error, please try again”

x32dbg 载入EXE,停到EntryPoint处。
点击上面 Az 按钮搜索字符串,可以看到许多可疑的东西,F2下断点吧
(上面还有提示凯撒加密,下面有个奇怪的字符串,有这方面基础应该可以直接解密)
00-strings.jpg

F9运行,前面断点可以不管,一直到输入密码处,随便输入一个“1234567890”,断在“Error, please try again"
向上找发现有比较并跳转
[Asm] 纯文本查看 复制代码
cmp dword ptr ss:[ebp-18],24
...
je xxxxx

发现[ebp-18]为0x0A,是10位,也就是输入密码的长度,因此推测密码应该是0x24=36位
再次调试,输入“123456789012345678901234567890123456”
成功断下,发现ecx和反汇编窗口中直接出现了flag ,应该是要作明文比较。成功解出!
02-flags.jpg



【03-Android初级题】
安卓题强烈建议看论坛中正己大佬的《安卓逆向这档事》系列教程,基本上初级中级没问题。
方法一:这道题直接玩游戏围小猫就行(要从离边缘处开始围),成功了看视频
方法二:无意中用十六进制编辑器打开apk 直接搜索 flag 找到一个!(纯属运气)
flag.jpg
方法三:应该可以用frIDA搞一下,因为时间关系就没试了




【04-Android初级题】
方法一:等时间,抽卡90发必中(大概一个多小时吧)
方法二:搭建雷电模拟器、装NP管理器,电脑安装Frida 、jadx
先用jadx打开apk看看,发现需要打开FlagActivity
04-1-jadx.JPG
(这里由于看代码的能力不够,frida知识不足,走了一段冤枉路,想尝试着用frida去改变出纠缠的时间间隔,未果~)
最后发现直接写一段frida代码打开FlagActivity就行(代码也是百度搜来的)
04-2-frida-js.JPG
成功解出Flag!
04-4-flag.JPG




【05-Android中级题】
首先jadx中看一下,发现解锁错误 会调用有个checkPassword函数,里面明显有调用
"assets/classes.dex"里loadClass("com.zj.wuaipojie2024_2.C").getDeclaredMethod("isValidate", ...去验证密码的过程
01-jadx.jpg

到模拟器里打开NP管理器,打开apk里的classes.dex,用"DEX编辑Plus"分析,找到com.zj.wuaipojie2024_2.C那个类,点转为Java
02-c.jpg

发现getStaticMethod("isValidate"...)调用了fix()生成"2.dex",fix又调用了read(),而read中又要读data目录下的decode.dex
02-c2.jpg 02-isValidate.jpg
现在就是要找到2.dex ,找出 com.zj.wuaipojie2024_2.A类,看d()方法中的解密方法(原来classes.dex中的A.d是错的)
到模拟器目录下,运行cmd,输入 adb shell打开命令行
cd /data/user/0/com.zj.wuaipojie2024_2
cd app_data
来到目录下,ls一下,发现只有1.dex
image.png
cp 1.dex decode.dex
手动给它复制一个decode.dex,再运行,发现还是没有2.dex
仔细看了一下代码,发现在getStaticMethod中有个fix.delete()居然用完马上删掉了。。。
那么 我只有两个思路,一是写个sh脚本 不断检测到2.dex马上复制一份, 二是用frida代码主动去调用一次 fix(read()),结果就会生成2.dex
两种方法试了很久。。。好像是用frida费了好大力气才解出2.dex,用NP打开
找到A.d方法
03-a-d.jpg
发现A.d正确了,首先是比较包签名是否正确(所以重新打包改了签名可能是不会成功的)
然后比较密码 9位数,可以看到是前9位不重复的数字 048531267
重新输入正确的数字密码 图案和数字的对应关系:
  0   1   2
  3   4   5
  6   7   8
然而。。。并没有什么反应!(此处找不到原因,只有读读大佬的分析帖子了)
不过在下面代码中显示线索在B.d
03-hint.jpg
又打开dex找到com.zj.wuaipojie2024_2.B,发现又是一个错误的方法 没用
看来还是加密了,需要用到A一样的方法解密
回顾一下原来checkPassword的代码和C.isValidate的代码:
[Java] 纯文本查看 复制代码
//MainActivity.checkPasswordString str2 = (String) new DexClassLoader(file.getAbsolutePath(), getDir("dex", 0)
  .getAbsolutePath(), null, getClass().getClassLoader())
  .loadClass("com.zj.wuaipojie2024_2.C")
  .getDeclaredMethod("isValidate", Context.class, String.class, int[].class)
  .invoke(null, this, str, getResources().getIntArray(R.array.A_offset));
// com.zj.wuaipojie2024_2.C
[font=Consolas, courier]    public static String isValidate(Context context, String str, int[] iArr) throws Exception {[/font]
[font=Consolas, courier]        try {[/font]
[font=Consolas, courier]            return (String) getStaticMethod(context, iArr, "com.zj.wuaipojie2024_2.A", "d", Context.class, String.class).invoke(null, new Object[]{context, str});[/font]
[font=Consolas, courier]        } catch (Exception e) {[/font]
[font=Consolas, courier]            Log.e(TAG, "咦,似乎是坏掉的dex呢!");[/font]
[font=Consolas, courier]            e.printStackTrace();[/font]
[font=Consolas, courier]            return "";[/font]
[font=Consolas, courier]        }[/font]
[font=Consolas, courier]    }

大致是加载dex后要调用getStaticMethod(context, <一个整数数组>, <一个类名>, <一个方法名>)这样去解密。
上面的代码中有R.array.A_offset,相应的在apk中也找到了R.array.B_offset。
接下来把刚才拿到的2.dex改名为decode.dex,再次用Frida等手段(当时都整到晚上了,具体过程有点乱没记录下来)
拿到解密后的2.dex, 这个就是A和B都解密过了,用NP打开找到B.d
03-b-d.jpg
可以找到flag的算法:比如我UID=1581363就是
Utils.md5(Utils.getSha1("0485312671581363".getBytes()))
这个就可以直接用frida脚本写一下,运行直接打印出来
这道题解了差不多一整天时间,还是基础不扎实啊!


【06-Windows高级题】
高级题我基本是解不出来的,只记录一下思考过程
两个文件,照样先查壳、脱壳crackme2024.exe, UPX改,按照论坛教程 ESP大法,用x64dbg成功解压缩
crackme2024service.exe, Themida壳 研究了好久,最后在github上找到一个python脱壳脚本,试了一下可以解出来但exe有7M多,可以运行
先分析crackme2024, x64dbg加载,找字符串下断点:
06-str.JPG
随便输入uid,sn,断下来,往下分析发现有个比较 0x23,得到sn长度35位
06-uid-sn.JPG
再往下分析发现它调用了COM组件进行sn验证,看来得分析service了
对service静态分析了一圈 没有什么头绪
又用x32dbg对service动态调试了一圈,仍然没有头绪
由于对COM技术不懂 做不下去了。
分析失败。


【07-Android高级题】
知道肯定解不出来,简单试一试
jadx分析一下,发现通过System.loadLibrary("52pojie")加载lib52pojie.so,再调用里面的checkSn(md5(uid), sn)函数进行验证。
07-jadx.jpg
找到lib52pojie.so,用IDA看到许多怪名字函数 用十六进制编辑器查看到有llvm obfuscator字样
07-llvm.jpg
百度了一下,ollvm这个东西太难搞了,跟着教程 又是准备unidbg又是搞虚拟机Kali环境
搞了好几天,无奈在unidbg加载so时始终出错(/ by zero),找不到原因,无法继续下去。
分析失败!


【08-Web题】

每年的web题会有许多有意思的地方,可以说是技术与艺术的完美结合~解题过程也是既紧张又开心的

下面按flag顺序列出:
flag1{52pj2024},视频有个点状图,中间黑色部分是字符。将速度调到0.5X慢慢看 就能看出来

flag2{xHOpRP}, 打开二维码网址后,F12打开开发人员选项,点“网络”,刷新一次,在http响应头中找找,有X-flag2字样

flag3{GRsgk2}, 在视频开头的一段雪花点图形序列中隐含,可以反复慢放能看出来 也可以用ffmpeg逐帧截图分析

flag4{YvJZNS}, 打开网址后,开发人员选项,同样在“网络”中可看到请求了flag4_flag10.png,下载即可看到

flag5{P3prqF}, 网页源码中有注释 flag5_flag9,下面有一长段代码 中间有断断续续的明文字母 提取即可

flag6{20240217}, 看源码,得知要求 md5(某数字) = '1c450bbafad15ad87c32831fa1a616fc'; 直接从cmd5.com查询得到

flag7{Djl9NQ}, 打开作者的github网址,上面有“删除不小心发出来的flag”字样。于是去找旧版本的 commit,在wip下找到

flag8{OaOjIK}, 直接玩游戏或通过 溢出 方法攻击得到

flag9{KHTALK}, 网页源码中,有一长段代码 将flag5删除,剩余的以点开头进行换行,就会组成一个ASCII图形
  
flag10{6BxMkW}, 前面下载的flag4_flag10.png,发现大小比同尺寸png大了一倍。试着用HEX编辑器将 宽度05 00改为0A 00 保存再打开查看 ,会隐约看到字符,这里我猜错了好几次 后来用百度找工具才看清楚

flag11{HPQfVF}, 像是拼图游戏,在源码里找到--var1和--var2,改变数值慢慢试

flag12{HOXI}, 查看代码后,直接穷举破解,每100万个输出一下log免得好像没反应 (开始从0起往上加,发现等了好久,所以改成从4294967295往下减 很快就出来了)

[Java] 纯文本查看 复制代码
WebAssembly.instantiateStreaming(fetch('flag12.wasm'))
        .then(({instance}) => {
            const get_flag12 = (secret) => {
                let num = instance.exports.get_flag12(secret);
                let str = '';
                while (num > 0) {
                    str = String.fromCodePoint(num & 0xff) + str;
                    num >>= 8;
                }
                return `flag12{${str}}`;
            }
            document.querySelector('button').addEventListener('click', (e) => {
                e.preventDefault();
                let i = 4294967295;
                for( ; i>0; i-- ) {
                     let s = get_flag12(i);
                     if( s.length >8 ) {
                                console.log(i); console.log(s);
                document.querySelector('#result').textContent = s;
                                break;
                     }
                    if( i % 1000000 == 0 ) console.log(i);
               }
                
            });
        });

得到 4005161829 ,输入即可

flagA:修改cookie,将flagA的值给uid,再fetch('auth/uid/')
flagB:玩游戏,v50后提示 溢出,试了一下有提示“购买后钱变多,有bug”,通过尝试发现大约是QWORD数据(8字节),通过计算 0x10000000000000000 / 999063388 = 18464037713,在购买数量输入后成功!
     同样方法可以大量买上面的道具,包括flag8。只不过用0x10000000000000000 / 10000 后不行。后来试了用 0x60000000000000000 / 10000 才行
flagC:用网站提示图片就会发现,有几张提示类别正确、位置错误的信息。下载图片,用ps将类别正确的图片多次尝试,先找类别,再找位置,很容易出来


【总结】

靠运气偶有得手,多学习才是正道!
祝大家龙年天天开心,事事顺心!

免费评分

参与人数 1威望 +2 吾爱币 +100 热心值 +1 收起 理由
Hmily + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

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

鹿鸣 发表于 2024-2-25 13:40
本帖最后由 鹿鸣 于 2024-2-25 13:42 编辑



这密码不对嘛,没出现success
 楼主| jackyyue_cn 发表于 2024-2-25 13:54
鹿鸣 发表于 2024-2-25 13:40
这密码不对嘛,没出现success

没有问题的,2o24中间是小写字母o,不是0 02-success.jpg
鹿鸣 发表于 2024-2-25 13:59
jackyyue_cn 发表于 2024-2-25 13:54
没有问题的,2o24中间是小写字母o,不是0

我这个也是o,但是报错,没看到问题在哪
鹿鸣 发表于 2024-2-25 14:35
鹿鸣 发表于 2024-2-25 13:59
我这个也是o,但是报错,没看到问题在哪

晓得了,后来的题目改了,最开始的版本是可以的
侃遍天下无二人 发表于 2024-2-25 16:18
简单题第二题我设计的后门是直接用第三方app(快速启动、快捷方式啥的)发起Intent跳转到FlagActivity,为此我把它的export属性专门设为true了,所以是不需要frida的,甚至root都不需要
 楼主| jackyyue_cn 发表于 2024-2-25 20:30
侃遍天下无二人 发表于 2024-2-25 16:18
简单题第二题我设计的后门是直接用第三方app(快速启动、快捷方式啥的)发起Intent跳转到FlagActivity,为 ...

啊 这个还真不知道,试一下秒出

04-backdoor.jpg
debug_cat 发表于 2024-2-25 21:00
侃遍天下无二人 发表于 2024-2-25 16:18
简单题第二题我设计的后门是直接用第三方app(快速启动、快捷方式啥的)发起Intent跳转到FlagActivity,为 ...

第一题,第二题安卓看完代码直接am命令飞过去就行,不用三分钟
 楼主| jackyyue_cn 发表于 2024-2-26 11:14
现在又发现web题 4、5、9的一招秒办法:


在源码中,将style下面body背景的white改为black
flag4_5_9black.jpg

然后细微调整一下窗口宽度,效果如下:
flag4_5_9.jpg
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-5-4 16:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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