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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
x86_nasm_helloworld.tar
20 KB
#code #backend #dev #asm 整理了一下构建工具什么的
duangsuse::Echo
x86_nasm_helloworld.tar
比较友好,虽然没有用到流程控制分支和循环什么的

也没有 bss 静态未初始化变量

不过倒是有函数调用,非常简洁,看不懂 GNU AS 应该也能看懂
#reveng duangsuse 终于重拾自信,好耶!是 x86 intel syntax 汇编!
  mov ebx, 100
mov edi, 0

loop:

push edi
call BEL
call printN

inc edi
cmp edi, ebx
jnz loop

call printLn

xor eax, eax
leave
ret
#code
bel.tar
50 KB
真实实现了 liba.so!BEL 而由我用 NASM x86 汇编器重写的版本(其实就是简单的翻译),马上利用 Compiler Expoler 进行优化计算的分析
duangsuse::Echo
#reveng duangsuse 终于重拾自信,好耶!是 x86 intel syntax 汇编!
This media is not supported in your browser
VIEW IN TELEGRAM
接下来可以分析 BEL 具体是如何优化的(因为已经实现了 BEL,并且代码别无二致)

我们的 BEL 公式 LLVM 优化后是这样的:

BEL:                                    # @BEL
lea eax, [4*rdi - 4]
cdqe
imul rax, rax, 1431655766
mov rcx, rax
shr rcx, 63
shr rax, 32
add eax, ecx
or eax, 3
add eax, 2
ret

之前:
BEL:                                    # @BEL
push rbp
mov rbp, rsp
mov dword ptr [rbp - 4], edi
mov edi, dword ptr [rbp - 4]
sub edi, 1
shl edi, 2
mov eax, edi
cdq
mov edi, 3
idiv edi
or eax, 3
add eax, 2
pop rbp
ret

使用 edb 分析确定每条指令的用途...

选择逆向 BEL 函数符号仅仅是因为它的指令条数很少,只有 35 条,我还能接受
别的控制分支都太复杂

这就可见逆向工程很费力了,一直来都是这样,优化做得太好了,机器也不聪明不能代替人工
人工又要看大量的汇编代码,并且最好了解编译原理写过优化器能擅长流程计算归并组合什么的... 难啊

想看大体,细节漏掉了算法就是错的,白逆向一场
想看局部,局部又太多哪里看得完

不想太费力气归并汇编代码,有些平台又不能用
想写出完全等价的算法,工程量又太大一个人做不了

想静态分析,不是很厉害的话又不容易看出是什么,容易迷惑
想动态分析,不是大佬的话又容易被看什么而迷惑

所以啊... 那些写 Java 会用 jadx 一类工具以至于会看 IL 的,写但是只能写 C/C++ 但不知道运行时发生了什么,只能看见一个个星号定义的指针的程序员们...
真是幸福啊。不需要接触这些有点扭曲的东西,面向愉悦编程,真好。

Rust 的开发者们不能说是不底层系统,但 Rust 编译器团队也还是认为他们是『开心的编程生涯』...

那连二进制是什么都不知道的有些前端们... 算什么呢???

当然,因为以前某件和逆向工程相关的事情再澄明一下,免得你们又说我是老鼠什么的,然后在那边大笑着说我们菜,我们在 C++ 编译生成的 x86 机器码反汇编的结果面前如猴子一般抓耳挠腮动不得你们的代码也无法理解你们一分钱的算法逻辑,自己用一天时间写的 C++ 代码经那群编译器工程师的作品(不知道你们在不在乎他们呢...)后再写出等价的来就要 10 天什么的 #Statement

我是主动给自己选择了地狱难度,想还原整个等价的 liba.so 令牌生成算法,这是十分困难的,我之前举烂了的 RENouveau 例子都不是这种做法,它虽然工程量很大但不致于真的完全还原所有算法,只是数据要的多而已

但是呢,其实如果我只是想快速 hack,玩法还是很多的,比如删除你们的包名签名校验逻辑和一些于密钥生成无关的逻辑、调整编辑共享对象文件的其他属性来移植到 Android 外的平台,甚至可以拿 WebAssembly、JavaScript 重写,或者利用 v86.js 直接在浏览器上执行都可以,只要目的小一些实现起来就是分分钟的事情

不管怎么样我觉得我不得不说... 写 C/C++ 系的原作者和无恶意的逆向工程者本来不应该互相讽刺的,都是同道中人,何苦呢?

当然,写 JavaScript 然后上混淆压缩器之类的就又作别论了... JavaScript 的还是小白多一些。这是事实。

不过这次主要就是玩玩 + 细化之前的知识,可能 trivial 的会多一点
Forwarded from Rachel 碎碎念 (Rime RainSlide)
冷知识:
Viper4Windows 和 Viper4Android 使用的脉冲反馈样本(Impulse Response Sample)文件,和 Adobe Photoshop 在 Windows 下使用的保存格式首选项文件(IRSettings,用于定义保存文件时的格式)的后缀名是一样的。
Forwarded from METO 的涂鸦板
没有分词的敏感词屏蔽
至于么...
太多脏话又怎么样... 有人看得么
神奇的笔记
https://t.me/solidot/5856 现在人都怎么了………
现在来说,OpenJDK 的开发团队可能就是那种『技术疯子』一样的人多一些了。可能不是特别注意自己的语言话都很直,大家工作起来话可能都比较直但大概是没有什么特别的恶意的『如果一个人的技术很差,我们也只能说他技术很差』,OpenJDK 也不是属于前端项目,不是面向大部分人的,也没有必要在工作的时候刻意说话特别文明

不过现在他们都改了,这着实也不错,其实我有时候也在本频道上骂街不知道你们知不知道(
duangsuse::Echo
🐱 Sticker
#Share #Reveng #Backend #Android #Radare2 #Decompiler #PL #CS #recommended
今天也不去完成之前那个跨平台 ABI 移植的问题了,专门研究一下 BEL 本来的定义是如何运行,指令们等价的代码是什么
顺便写出一点调试用的示例 i686 汇编程序试试

顺便推荐动态指令工具 Frida 和反编译器 RetDec,都是跨平台的逆向分析工具(当然 Android 上动态分析 AndBug 也不错)
还有 Compiler ExplorerCTF Wiki 之类的

Radare 2 是著名的开源跨平台逆向分析框架,能够读取多种文件格式、支持很多动态分析调试器、有很多种前端(诸如 Qt 的 Cutter)可以使用,也可以远程调试,支持插件并且 CLI 非常方便,能够进行许多厉害的静态分析

堪比商业软件 IDA
R2 工程组里是有前端的,只不过他们比较喜欢推广 CLI Shell 而已,有些人可能认为 R2 没有前端只能用 CLI,实际上 R2 的 HTML 前端是非常友好的,也非常适合进行远程调试
这里 R2 在开源系逆向工程工具里的地位就好像类似于 KODI 在 Home Theater 软件里的地位了,真的是自由软件一家独大一样

其实有些人认为自由软件非常萎靡不振,永远不可能超过商业软件,单靠爱发电注定失败,其实谁又曾单单靠爱发电过,都是自己或许还有一组人业余时间弄的

真正厉害的自由软件都是后端应用,因为前端是面向用户的,后端是面向开发者的,开发者才会管你开不开源,而且,很多后端都是明白自己能到这一步,身后有大批自由软件的辅助的,包括开始替换 Amsterdam Compiler Kit 的 GNU Compiler Collection(GCC)
不感动才难。

而前端呢?很多前端的技能都是教钱给培训机构学的,或者,他们只能看到自己看文档、看博客时候的『努力』(其实,直白一点说,相比之前的人,你们的那点努力算什么?)。对他们来说,后面的都是各种各样的公司和大佬,自己是交了钱的,或者在『试用』他们的产品,或者觉得某某大佬很厉害,很多人根本不知道最开始的时候计算机世界是怎么样的,后来 Bill Gates 又商业化后又怎么样,不是说商业化不好,但现在很多前端不知道自己熟悉的环境背后有多少自由软件的暗中帮助,所以他们可能会对自由软件乃至开源都有偏见,认为永远不如商业软件

是相当方便的逆向工程和软件分析工具,当然那个分析和编译原理的编译优化分析无关,或许有关但关系不重要。

顺便给大家科普一下, #Android 上用 Radare 2 + R2HTTP 前端如何对 ARM/x86 native code 进行动态分析 #reveng

为了方便起见使用 Android-x86 虚拟机和 R2 的 HTTP 前端进行远程调试。
Radare 2 Web 前端的截图