0基础go逆向,麻了,直接找乱找,后来下个断点终于找到了
0x00 日常查壳
无壳go逆向(雾
0x01 分析主函数
go第一次逆,根本一头雾水,就是动调跟,跟着跟着还能莫名跑飞??好像是什么并发然后就会跑到其他线程?
下面就是关键的加密函数了,不过跟不进加密函数,经过几番调试,在数据上下个写入断点发现加密逻辑
直接跳到main_f,其实找就找到这个了,就是跟不上很懵
动调跟到最后的判断,知道是rax和rbx,一个是我们输入一个是密文,提取密文
0x02 GetFlag
写个脚本简单直出
1 | data = [ 0x07, 0x0A, 0x14, 0x55, 0x1C, 0x51, 0x57, 0x5C, 0x10, 0x02, |
GetFlag!
关于官方WP额外扩展
通过官方WP是得知到底是在哪里实现的
比较有意思的是前面处理完数据,再在这接收数据进行修改,所以每次跟的迷惑就是这了,不过下断点还是能找到关键加密位置的
引用自WP
主要流程并不复杂,通过 fmt_Fscanf 获取输入,
strings_Map 调用 main_main_func1 进行映射
之后 runtime_stringtoslicebyte 将映射后的输入转为 []byte
runtime_makechan 创建 channel,在循环中,获取 []byte [i:i+3] 的 slice
将 slice 和 channel 一同传给 main_maindwrap1 调用 goroutine main_f 进行处理
runtime_chanrecv1 获取处理结果,runtime_memmove 将结果复制回 []byte [i:i+3]
循环处理结束后,调用 runtime_memequal 将处理结果与正确结果进行比较。
🍬
🍪
About this Post
This post is written by P.Z, licensed under CC BY-NC 4.0.