这是一个非常基本的 golang 程序:
package main
import "fmt"
func main() {
var s1 string
fmt.Scanln(&s1)
if s1=="goodpassword" {
fmt.Println("Good")
} else {
fmt.Println("Wrong")
}
}
我已经编译了这个程序(elf64 linux 二进制文件)。
我已经反汇编了二进制文件,并且找到了 2 个 fmt.Println 调用的地址:
...
0x00490d4f lea rax, obj.main.statictmp_1 ; wrong
...
0x00490d99 lea rax, obj.main.statictmp_0 ; good
...
现在,我写了这个python程序:
import angr
from angr.state_plugins import SimSystemPosix
p = angr.Project('./mybinary')
sm = p.factory.simulation_manager()
sm.explore(find= 0x00490d99, avoid= 0x00490d4f)
print(sm.found[0].posix.dumps(0))
我不明白为什么 angr 不返回“goodpassword”字符串。我有什么不对,但我不明白是什么......
谢谢你的帮助