duangsuse::Echo
duangsuse 正愁这里的控制流太复杂不好分析又不能上动态直接看算法结果,忽然发现这其实是个被混淆的 Base64 string 🤔 验证不用愁了
为什么完全还原算法逻辑更难?因为这么做需要你有很强的编译原理,最好还有 C 编程的功底...
而那些有点能力的『破解者』们,只需要知道它做什么,比如在这里,解码一个被混淆的 Base64
然后他们就可以直接动态分析,在
而那些有点能力的『破解者』们,只需要知道它做什么,比如在这里,解码一个被混淆的 Base64
然后他们就可以直接动态分析,在
call sym.BD 上打上断点,返回之后 eax (修正,是 ebp-0x190)就是被解密 Base64 的字符串指针了,根本不需要知道,甚至都不用分析 Base64 解码调用的第一个参数是分配在栈上还是动态分配无时不刻不在提醒着我 r2 分析出的哪个栈帧偏移量可能是 C 源码里的哪个局部变量,结果是逆向工程还原出整个逻辑都会轻松很多
所以不要小瞧这一点 debug information...
所以不要小瞧这一点 debug information...
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)
duangsuse::Echo
有时候可能会很 SSA(Static Single Assignment) 地想,是不是找到了最后要的某个东西,就能根据它推断出它的依赖逻辑呢?这个本地变量就是最后的 Token 结果。
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
邪恶的 duangsuse 居然把这个依赖 DAG 收起来了... 🤔
你们这个是个什么口令生成算法啊,你们这是雷普前端开发者们啊你们这个算法。
麻烦你们,真的太过分了你们搞这个『加密算法』干什么,我的项目每一行代码都过不了那个 lint 检查啊,它现在没法连上你们的 API,你叫我项目怎么办啊,它还事个幼儿园基本的弱智应用好不好。
你们这是什么算法啊,哼!哼!啊啊啊啊啊啊啊。你们害死我项目了谁是出要写这种东西主意的快出来你们写代码的,再不出来我 ****** 了啊!
我跟你们说你们这群 Android 开发者啊,一天到晚搞什么这些加密啊代码保护啊会害死你们的(迫真)
你们没有前途我跟你们说你们这400多号人好好写 Jawa 不好么,一天到晚 show C/C++ 有什么意思,有什么意思啊,我偶尔写一下都快被恶心死了。
麻烦你们重视一下你们的 Jack 有点发展目标好不好,一天到晚写写 Rx 写写 Vertx 写写 Databinding 不是人啊,你们一天到晚搞 C++ 不好好写 pattern 没有前途的,NDK 害死人。
#Haha #security #Android #dev 😤
麻烦你们,真的太过分了你们搞这个『加密算法』干什么,我的项目每一行代码都过不了那个 lint 检查啊,它现在没法连上你们的 API,你叫我项目怎么办啊,它还事个幼儿园基本的弱智应用好不好。
你们这是什么算法啊,哼!哼!啊啊啊啊啊啊啊。你们害死我项目了谁是出要写这种东西主意的快出来你们写代码的,再不出来我 ****** 了啊!
我跟你们说你们这群 Android 开发者啊,一天到晚搞什么这些加密啊代码保护啊会害死你们的(迫真)
你们没有前途我跟你们说你们这400多号人好好写 Jawa 不好么,一天到晚 show C/C++ 有什么意思,有什么意思啊,我偶尔写一下都快被恶心死了。
麻烦你们重视一下你们的 Jack 有点发展目标好不好,一天到晚写写 Rx 写写 Vertx 写写 Databinding 不是人啊,你们一天到晚搞 C++ 不好好写 pattern 没有前途的,NDK 害死人。
#Haha #security #Android #dev 😤
2a6e2adc2897c8d8133db17c2cd3b1045834ce58-d7d5-38eb-95d5-563167a1983d0x588f16cd
(第一部分是机器代码计算的校验和(用到了 base64 和 MD5),我花了两天用 C 重写了,第二部分是 UUID,第三部分是当前 UNIX 时间的十六进制表示)
7fa737c3bc4e80f1381d3c7e1bfdd40d47b11e0b-97b6-454b-9831-ccaff8f19f020x5c6a5245
🤔 哦... 我记得看汇编的时候的确可能拼接了这个
还是不行,
(第一部分是机器代码计算的校验和(用到了 base64 和 MD5),我花了两天用 C 重写了,第二部分是 UUID,第三部分是当前 UNIX 时间的十六进制表示)
7fa737c3bc4e80f1381d3c7e1bfdd40d47b11e0b-97b6-454b-9831-ccaff8f19f020x5c6a5245
🤔 哦... 我记得看汇编的时候的确可能拼接了这个
0x, 不过因为不是用 strcat 所以我没加,加上试试还是不行,
duangsuse::Echo
2a6e2adc2897c8d8133db17c2cd3b1045834ce58-d7d5-38eb-95d5-563167a1983d0x588f16cd (第一部分是机器代码计算的校验和(用到了 base64 和 MD5),我花了两天用 C 重写了,第二部分是 UUID,第三部分是当前 UNIX 时间的十六进制表示) 7fa737c3bc4e80f1381d3c7e1bfdd40d47b11e0b-97b6-454b-9831-ccaff8f19f020x5c6a5245 🤔 哦... 我记得看汇编的时候的确可能拼接了这个…
我用 UUIDParser 弄了一下,发现给的 UUID 其实都有区别(一个是 name based 一个是 time based)... 最讨厌的就是有时候动态分析很麻烦 🤔
我看这逻辑也挺 plain 的,继续分析,Ruby 重写一下 emmmm...
bd 就是 base64 decode(dst, src)
be 就是 base64 encode(dst, src, srclen)
me 就是 MD5 based message digest(dst, src)
r 就是 reverse string(s)
🤔 好像虽然不是很能完全理解,但是基于调试符号的帮助,重写也不是很困难,我得想想这些名字都会代表什么
我看这逻辑也挺 plain 的,继续分析,Ruby 重写一下 emmmm...
bd 就是 base64 decode(dst, src)
be 就是 base64 encode(dst, src, srclen)
me 就是 MD5 based message digest(dst, src)
r 就是 reverse string(s)
🤔 好像虽然不是很能完全理解,但是基于调试符号的帮助,重写也不是很困难,我得想想这些名字都会代表什么