duangsuse::Echo
838 subscribers
4.54K photos
141 videos
587 files
6.91K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): a19a0b
Download Telegram
duangsuse::Echo
#reveng #tools #share 分享一些开源机器代码 REverse engineering 工具 ❤️ == https://github.com/namhyung/dwarview ELF DWARF 调试符号信息查看器 == https://igio90.github.io/Dwarf/docs/installation.html 一个普通的(并非逆向工程用)调试器 == https://github.com/wisk/medusa 一个普通有 GUI 的 disassembler…
plasma 的完成度给人感觉很差劲,得 merge 一个 PR 才能用在 ELF 上,而且,好像居然用来对付动态链接库的话 capstone 反汇编引擎会爆炸,不知道为什么
在 jni.h 的结构体定义和调试行号的帮助下,JNI 动态 call eax 问题迎刃而解,我有信心在只静态分析的情况下重写所有算法逻辑(至少我之前成功了一次) 🎉
在 Radare2 的强力动态分析(暴论)和 JNI 结构体的强力 C functionptr offset 计算辅助之下,酷安的 liba.so 验证逻辑即将全盘爆炸(悲)从此官方再不能逼死同人 😢
迫真手算 rodata 段偏移量 🤔
coolapk_a_kdev_2.zip
156.3 KB
今天的逆向进度
好过分,这是 loop unrolling (循环展开)么...
duangsuse 正愁这里的控制流太复杂不好分析又不能上动态直接看算法结果,忽然发现这其实是个被混淆的 Base64 string 🤔 验证不用愁了
duangsuse::Echo
duangsuse 正愁这里的控制流太复杂不好分析又不能上动态直接看算法结果,忽然发现这其实是个被混淆的 Base64 string 🤔 验证不用愁了
为什么完全还原算法逻辑更难?因为这么做需要你有很强的编译原理,最好还有 C 编程的功底...

而那些有点能力的『破解者』们,只需要知道它做什么,比如在这里,解码一个被混淆的 Base64
然后他们就可以直接动态分析,在 call sym.BD 上打上断点,返回之后 eax (修正,是 ebp-0x190)就是被解密 Base64 的字符串指针了,根本不需要知道,甚至都不用分析 Base64 解码调用的第一个参数是分配在栈上还是动态分配
调试符号有什么用?🌚
无时不刻不在提醒着我 r2 分析出的哪个栈帧偏移量可能是 C 源码里的哪个局部变量,结果是逆向工程还原出整个逻辑都会轻松很多
所以不要小瞧这一点 debug information...
酷安大佬们很聪明,我以为(对『破解者』来说)那么难看的 *char 操作都是酷大佬写的,可其实是 GCC 4.9 写的(跑
duangsuse::Echo
酷安大佬们很聪明,我以为(对『破解者』来说)那么难看的 *char 操作都是酷大佬写的,可其实是 GCC 4.9 写的(跑
[DuangSUSE@duangsuse]~/Projects/HackingCoolApk/liba/RE/dwarview% base64 -d
e7177eb11a13ea5672c543da1690e302dG9rZW46Ly9jb20uY29vbGFway5tYXJrZXQvYzY3ZWY1OTQzNzg0ZDA5NzUwZGNmYmIzMTAyMGYwYWI_7d3bcfe1ca700fdccf5a8595f98f70d8
{�{���խwy�z�g9�wZׯt{}6token://com.coolapk.market/c67ef5943784d09750dcfbb31020f0abbase64: 输入无效

有点意思了 🤔
duangsuse::Echo
[DuangSUSE@duangsuse]~/Projects/HackingCoolApk/liba/RE/dwarview% base64 -d e7177eb11a13ea5672c543da1690e302dG9rZW46Ly9jb20uY29vbGFway5tYXJrZXQvYzY3ZWY1OTQzNzg0ZDA5NzUwZGNmYmIzMTAyMGYwYWI_7d3bcfe1ca700fdccf5a8595f98f70d8 {�{���խwy�z�g9�wZׯt{}6token://com.c…
puts Base64.decode64(Base64.decode64('OGQwN2Y4OWY1OTU4YTVmY2NkZjAwN2FjMWVmY2IzZDcvSVdZd1lHTXlBVE16SW1ZbU5HWndVek41QURaMGd6TnpRVE8xWVdaM1l6WXZRWFpySlhZdDV5YXdGR2J2OTJZdTAyYmo5eUw2NFdacjlHZDIwM2UwOTYxYWQzNDVjMjc2NWFlMzFhMTFiZTc3MTdl').reverse)
酷安大佬貌似是拼接了一大堆包含时间、包名、UUID String 的信息,然后服务端也重复这个算法,比较 Hash 值么?
已经开始无聊了 🤔 全 TM 是 base64 + 拼接字符串
相当无聊的 面向子程序调用分析(COA
有时候可能会很 SSA(Static Single Assignment) 地想,是不是找到了最后要的某个东西,就能根据它推断出它的依赖逻辑呢?这个本地变量就是最后的 Token 结果。
🤔继续往下分析动态字符数组栈上分配...
邪恶的 duangsuse 居然把这个依赖 DAG 收起来了... 🤔