我有二进制A,这是一个带有附带符号的调试版本 - 很多年前构建的.我也有二进制B,没有附带符号的发布版本,并且更新.我要寻找从二进制符号匹配的最有效的方法一以二进制的潜在候选人乙.
鉴于调试版本要大得多(输入验证更多,打印更多内容stderr等等)并且函数总是随着时间的推移而变化,我认为尝试指纹各个函数将浪费时间.
因此,我已经决定 - 非常凭空,所以我可能会咆哮错误的树 - 指纹函数的最佳方法是创建两个二进制文件的调用图并尝试匹配顶点(即功能).
我已经做了一些预处理,所以我有以下数据结构:
# binary A
[[60, 60, 8734], # function 0 is called by functions 60 (twice) and 8734
[193, 441, 505], # function 1 is called by functions 193, 441 and 505
[193, 742],
[23],
[21],
[21],
[26],
[26, 1508, 1509, 1573],
[24],
[25],
...] # (~10k functions)
# binary B
[[8999], # function 0 is called …Run Code Online (Sandbox Code Playgroud) 我有IDA PRO 6.1 - (我无法安装最新版本)
我试图用bochs调试器或windgb调试x64应用程序.
我做了以下事情:
确保ida.cfg中Windows调试器的默认路径是:
DBGTOOLS = "C:\\Program Files (x86)\\Windows Kits\\8.1\\Debuggers\\x86\\";
Run Code Online (Sandbox Code Playgroud)我无法使用任何调试器使用x64,我希望对配置调试器的正确方法有一点指导.
我无法调试任何x64应用程序.当我将调试器设置为bochs时,它开始运行,然后遇到以下错误:

当我尝试使用windgb时,它会一直报告:
无法初始化WinDgb引擎...有错误:找不到指定的过程.(000007F)...
当我点击OK我得到:
"调试器插件无法加载文件.请验证参数是否有效."
什么是正确的参数?
我在调试本地应用程序时是否有连接字符串.在IDA帮助文件中,它表示将Connection字符串留空以供本地应用程序使用,但即使我选择x64 dbgsrv.exe并设置默认连接字符串也不起作用.
我正在为学生开发缓冲区溢出练习。在这种情况下,您通常必须提供任意字节作为程序的输入(返回地址)。
假设这个例子:
#import <stdio.h>
#import <string.h>
void func() {
char buf[4];
gets(buf);
}
int main (int argc, char** argv) {
func();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
通常我会用 gdb 进行试验,直到找到一个解决方案,然后可以将其公式化为
python -c 'print "A"*8+"\x08\x04\88\72"' | ./program
Run Code Online (Sandbox Code Playgroud)
在开发越来越复杂的练习的同时,找到解决方案的难度也在增加。有时通过覆盖gdb中的返回地址
set {int}address_of_address = new_address
Run Code Online (Sandbox Code Playgroud)
有效,但 python 方法无效。调试它并能够在程序运行时在 gdb 中输入像“\x04”这样的字节会很好,分析效果。
有没有办法做到这一点?
这个问题似乎相关,但用 python 方法回答:从标准输入发送任意字节到 fgets
我的不止于此:-/
我必须转到 中的特定内存地址OllyDbg,而且我在网上找不到任何东西(也在这个论坛中)。
如何前往特定地址?
所以会提示我一个窗口,询问我想去的地址,如果这个地址不在该.text部分,但可能进入另一个部分。
提前致谢 =)
我想通过静态分析获取给定二进制文件 (x86_64) 中使用的系统调用列表。我试过 strace 但它不能保证它是一个完整的列表,因为在执行过程中可能不会调用某些系统调用。
operating-system static-analysis reverse-engineering system-calls
我想使用 Radare2 来了解 C 是如何组装成程序集的,但我在布局方面遇到了问题。我觉得是V!模式将非常方便,因为您可以在指令指针在程序中移动时观察寄存器更新,但我不了解布局。
似乎当我添加一个窗口(如这张照片中的 Stack 或 Registers)时,它出现在屏幕外,我必须尝试关闭不同的窗口和拆分窗口,直到布局合适为止。是否有一种简单的方法可以准确更改每个窗口中的内容?
我知道“X”关闭一个窗口,“z”将当前窗口切换到最前面,“-”/“|” 分割一个窗口。
我曾尝试查看帮助,但似乎无法找出与此问题相关的任何其他命令。
这个字节码来自exec marshal.loads('<BYTECODE>'),我想将它转换成具有清晰源代码的常规 python 脚本。我无法粘贴所有字节码,因为它重约 4MB,因此我将链接附加到GitHub(在 Pastebin 上文件太大)。
我尝试使用此代码来反转此字节码:
import sys
from sys import stdout
import uncompyle6
from uncompyle6.main import *
import marshal
x = marshal.loads('BYTECODE')
uncompyle6.main.uncompyle(2.7, x, sys.stdout)
Run Code Online (Sandbox Code Playgroud)
但它只适用于较小的文件,例如:
c\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00@\x00\x00\x00sa\x00\x00\x00d\x00\x00d\x01\x00l\x00\x00Z\x00\x00d\x00\x00d\x02\x00l\x01\x00m\x02\x00Z\x02\x00\x01d\x00\x00d\x03\x00l\x03\x00m\x04\x00Z\x04\x00\x01d\x04\x00\x84\x00\x00Z\x05\x00d\x05\x00\x84\x00\x00Z\x06\x00d\x06\x00\x84\x00\x00Z\x07\x00e\x08\x00d\x07\x00k\x02\x00r]\x00e\x05\x00\x83\x00\x00\x01n\x00\x00d\x01\x00S(\x08\x00\x00\x00i\xff\xff\xff\xffN(\x01\x00\x00\x00t\x04\x00\x00\x00exit(\x01\x00\x00\x00t\x06\x00\x00\x00sha512c\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\t\x00\x00\x00d\x01\x00GHd\x00\x00S(\x02\x00\x00\x00Ns\x0c\x00\x00\x00import me :D(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyt\x04\x00\x00\x00main\x05\x00\x00\x00s\x02\x00\x00\x00\x00\x01c\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00C\x00\x00\x00s\xb5\x00\x00\x00|\x00\x00d\x01\x00 d\x02\x00k\x03\x00r\x1a\x00t\x00\x00\x83\x00\x00\x01n\x00\x00|\x00\x00d\x01\x00\x1f}\x00\x00t\x01\x00j\x02\x00t\x01\x00j\x01\x00\x83\x00\x00\x83\x01\x00}\x01\x00t\x01\x00j\x03\x00d\x03\x00t\x01\x00j\x02\x00\x83\x00\x00\x83\x02\x00}\x02\x00t\x04\x00|\x02\x00\x83\x01\x00j\x05\x00\x83\x00\x00}\x03\x00|\x01\x00j\x06\x00d\x04\x00\x16d\x05\x00\x17}\x04\x00|\x04\x00|\x01\x00j\x07\x00d\x06\x00\x16d\x07\x00\x17\x14}\x05\x00|\x03\x00|\x04\x00|\x05\x00!}\x06\x00|\x06\x00|\x00\x00k\x03\x00r\xac\x00t\x00\x00\x83\x00\x00\x01n\x00\x00d\x08\x00GHd\x00\x00S(\t\x00\x00\x00Ni+\x00\x00\x00s+\x00\x00\x00http://wargame.kr:8080/pyc_decompile/?flag=s\x0c\x00\x00\x00%m/%d/HJEJSHi\x03\x00\x00\x00i\x01\x00\x00\x00i\x1e\x00\x00\x00i\n\x00\x00\x00s\x07\x00\x00\x00GOOD!!!(\x08\x00\x00\x00t\x03\x00\x00\x00diet\x04\x00\x00\x00timet\t\x00\x00\x00localtimet\x08\x00\x00\x00strftimeR\x01\x00\x00\x00t\t\x00\x00\x00hexdigestt\x07\x00\x00\x00tm_hourt\x06\x00\x00\x00tm_min(\x07\x00\x00\x00t\x04\x00\x00\x00flagt\x03\x00\x00\x00nowt\x04\x00\x00\x00seedt\x02\x00\x00\x00hst\x05\x00\x00\x00startt\x03\x00\x00\x00endt\x02\x00\x00\x00ok(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyt\x0c\x00\x00\x00GIVE_ME_FLAG\x08\x00\x00\x00s\x18\x00\x00\x00\x00\x01\x10\x00\n\x01\n\x01\x15\x01\x18\x01\x12\x01\x11\x01\x15\x01\r\x01\x0c\x00\n\x01c\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00C\x00\x00\x00s\x10\x00\x00\x00d\x01\x00GHt\x00\x00\x83\x00\x00\x01d\x00\x00S(\x02\x00\x00\x00Ns\x07\x00\x00\x00NOPE...(\x01\x00\x00\x00R\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyR\x03\x00\x00\x00\x14\x00\x00\x00s\x04\x00\x00\x00\x00\x01\x05\x01t\x08\x00\x00\x00__main__(\t\x00\x00\x00R\x04\x00\x00\x00t\x03\x00\x00\x00sysR\x00\x00\x00\x00t\x07\x00\x00\x00hashlibR\x01\x00\x00\x00R\x02\x00\x00\x00R\x11\x00\x00\x00R\x03\x00\x00\x00t\x08\x00\x00\x00__name__(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\n\x00\x00\x00bughela.pyt\x08\x00\x00\x00<module>\x01\x00\x00\x00s\x0e\x00\x00\x00\x0c\x01\x10\x01\x10\x02\t\x03\t\x0c\t\x04\x0c\x01
Run Code Online (Sandbox Code Playgroud)
c\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00@\x00\x00\x00s\xfb\x02\x00\x00d\x00\x00d\x01\x00l\x00\x00Z\x00\x00d\x00\x00d\x01\x00l\x01\x00Z\x01\x00d\x00\x00d\x01\x00l\x02\x00Z\x02\x00d\x00\x00d\x01\x00l\x03\x00Z\x03\x00d\x02\x00Z\x04\x00d\x03\x00Z\x05\x00d\x04\x00Z\x06\x00d\x05\x00Z\x07\x00d\x06\x00Z\x08\x00d\x07\x00\x84\x00\x00Z\t\x00y2\x00e\t\x00\x83\x00\x00\x01e\x06\x00d\x08\x00\x17GHe\n\x00d\t\x00\x83\x01\x00Z\x0b\x00e\x0b\x00j\x0c\x00d\n\x00d\x0b\x00\x83\x02\x00Z\r\x00Wn\x0e\x01\x04e\x0e\x00k\n\x00r\xc7\x00\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x0f\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\xd3\x00\x04e\x10\x00k\n\x00r0\x01\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x10\x00\x17GHe\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x11\x00\x17GHe\x03\x00j\x11\x00d\x12\x00\x83\x01\x00\x01e\x01\x00j\x0f\x00\x83\x00\x00\x01nj\x00\x04e\x12\x00k\n\x00r\x99\x01\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x13\x00\x17GHe\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x11\x00\x17GHe\x03\x00j\x11\x00d\x12\x00\x83\x01\x00\x01e\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xy\x19\x00e\x13\x00e\x0b\x00d\x14\x00\x83\x02\x00j\x14\x00\x83\x00\x00Z\x15\x00WnC\x00\x04e\x16\x00k\n\x00r\xf8\x01\x01\x01\x01e\t\x00\x83\x00\x00\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x15\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xy%\x00e\x17\x00e\x15\x00d\x16\x00d\x17\x00\x83\x03\x00Z\x18\x00e\x00\x00j\x19\x00e\x18\x00\x83\x01\x00Z\x1a\x00WnC\x00\x04e\x1b\x00k\n\x00rc\x02\x01\x01\x01e\t\x00\x83\x00\x00\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x18\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xe\x13\x00e\r\x00d\x19\x00\x17d\x1a\x00\x83\x02\x00Z\x1c\x00e\x1c\x00j\x1d\x00d\x1b\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1c\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1d\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1e\x00e\x1e\x00e\x1a\x00\x83\x01\x00\x17d\x1f\x00\x17\x83\x01\x00\x01e\x1c\x00j\x1f\x00\x83\x00\x00\x01e\t\x00\x83\x00\x00\x01e\x04\x00d\x0c\x00\x17e\x07\x00\x17d \x00\x17e\x04\x00\x17d\x0e\x00\x17e\x06\x00\x17d!\x00\x17e\x07\x00\x17e\r\x00\x17d"\x00\x17GHd\x01\x00S(#\x00\x00\x00i\xff\xff\xff\xffNs\x05\x00\x00\x00\x1b[34ms\x05\x00\x00\x00\x1b[31ms\x05\x00\x00\x00\x1b[32ms\x04\x00\x00\x00\x1b[0ms\x07\x00\x00\x00\x1b[33;5mc\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00C\x00\x00\x00s\xfb\x00\x00\x00t\x00\x00j\x01\x00d\x01\x00\x83\x01\x00\x01t\x02\x00d\x02\x00\x17GHt\x03\x00d\x03\x00\x17GHt\x02\x00d\x02\x00\x17GHt\x04\x00d\x04\x00\x17d\x05\x00d\x06\x00\x14\x17d\x07\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\t\x00\x17t\x03\x00\x17d\n\x00\x17t\x04\x00\x17d\x0b\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x0c\x00\x17t\x03\x00\x17d\r\x00\x17t\x04\x00\x17d\x0e\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x0f\x00\x17t\x03\x00\x17d\x10\x00\x17t\x04\x00\x17d\x08\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x11\x00\x17t\x03\x00\x17d\x12\x00\x17t\x04\x00\x17d\x13\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x14\x00\x17t\x03\x00\x17d\x15\x00\x17t\x04\x00\x17d\x16\x00\x17GHt\x04\x00d\x04\x00\x17d\x05\x00d\x06\x00\x14\x17d\x17\x00\x17GHd\x00\x00S(\x18\x00\x00\x00Nt\x05\x00\x00\x00clears$\x00\x00\x00 +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+s$\x00\x00\x00 |C|o|m|p|i|l|e| |M|a|r|s|h|a|l|s\x02\x00\x00\x000{i\'\x00\x00\x00t\x01\x00\x00\x00=s\x02\x00\x00\x00}0t\x01\x00\x00\x00|s\x0b\x00\x00\x00 Coded by: t\n\x00\x00\x00xNot_Founds\x15\x00\x00\x00 |s\x0b\x00\x00\x00 Contact : s\x10\x00\x00\x00+62823-8637-2115s\x0f\x00\x00\x00 |s\x0b\x00\x00\x00 Email : s\x1e\x00\x00\x00febryafriansyah@programmer.nets\x0b\x00\x00\x00 Website : s\x1a\x00\x00\x00http://hatakecnk.noads.bizs\x05\x00\x00\x00 |s\x0b\x00\x00\x00 Github : s\x1c\x00\x00\x00https://github.com/hatakecnks\x03\x00\x00\x00 |s\x03\x00\x00\x00}0\n(\x06\x00\x00\x00t\x02\x00\x00\x00ost\x06\x00\x00\x00systemt\x01\x00\x00\x00Rt\x01\x00\x00\x00Wt\x01\x00\x00\x00Yt\x01\x00\x00\x00B(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<debby>t\x06\x00\x00\x00banner\t\x00\x00\x00s\x16\x00\x00\x00\x00\x01\r\x01\t\x01\t\x01\t\x01\x15\x01!\x01!\x01!\x01!\x01!\x01s\x11\x00\x00\x00Ex :/sdcard/ex.pys*\x00\x00\x00\x1b[0m[\x1b[31mInput Your File Path\x1b[0m]> \x1b[36ms\x03\x00\x00\x00.pyt\x00\x00\x00\x00t\x01\x00\x00\x00[t\x01\x00\x00\x00!s\x02\x00\x00\x00] s\x12\x00\x00\x00there is an error\ns\x0f\x00\x00\x00ctrl+c detecteds\x0f\x00\x00\x00trying to exit\ni\x03\x00\x00\x00s\x0f\x00\x00\x00ctrl+d detectedt\x01\x00\x00\x00rs\x0f\x00\x00\x00file not exist\ns\x07\x00\x00\x00<debby>t\x04\x00\x00\x00execs\x16\x00\x00\x00file already …Run Code Online (Sandbox Code Playgroud) 我需要每周通过 python 脚本从亚马逊的卖家中心门户为我们的多个客户提取报告。我尽量避免使用 webdriver,因为它们在不同的操作系统上不一致、容易出错(根据经验)。因此,我认为尝试对 Sellercentral.amazon.com 的登录过程进行逆向工程将是一个有趣的小项目(也许最终是徒劳的)。这个过程并不难,除了初始登录表单中的两个字段:password和metadata1。password下面将详细讨论该字段。该metadata1领域似乎采用了类似的技术,同时引入了每隔几秒更改一次的额外障碍。当我监控metadata1它似乎是使用各种浏览器指标的大型 json 对象生成的。但是,一次做一件事,所以我将在这篇文章中关注密码加密,并metadata1在以后的文章中担心。
提交表单后,password字段中的值使用本文中进一步讨论的技术进行加密。生成的加密值然后替换密码字段中的值并重命名该字段encryptedPwd
到目前为止,我一直在查看 javascript 文件并逐步完成代码序列,并了解到以下内容:
SiegeCrypto.addProfile("AuthenticationPortalSigninNA", {
"password": {dataType: "AuthPortalSigninPasswordNA", requiresTail: false},
});
...
SiegeCrypto.addDataType({
"dataTypeId": "AuthPortalSigninPasswordNA",
"jwkPublicKey": {"kty":"RSA","e":"AQAB","n":"gXXZV1VqZ6k_uQtyJNJy5q-qvKdqrXJNgKUO1aYc1UPBVqlhCP0GPxf-0GSo-LEtArgcbF8-j6_vSLSqztYxxF8og--rB8zAyZ8DXZaugX-UiJDQnoJL_HtXKuwIm9U7oEPoeD6H4ZDcfbsPj77xVn7UA2-a90N4aZqMC8EIfXIy1tqSbSPnxPOaiEmy8xGtG-L3RdCyc7TL0Swd_f0_DjRT6ip91IBlCmquoa-xJgZ9e44PVH4AwdyssiV4ZLEZ5yFcE0zcRb_62kx_TQptidbJ4nHocFVjmUW9YsrAWeKrBmOGZEjO4vbATYs1Yf4vgcH7Ix61EPR5sbDP4SlBWQ"},
"providerId": "si:md5",
"keyId": "56d14edce8e2cb6c6842c59ddaee426e"
});
Run Code Online (Sandbox Code Playgroud)
单步执行代码,我能够找到算法的更多细节
*profile* (used by SiegeCrypto)
- password: {dataType: "AuthPortalSigninPasswordNA", requiresTail: false}
*publicKeyProvider* (added as a DataType to …Run Code Online (Sandbox Code Playgroud) python encryption cryptography reverse-engineering python-3.x
我正在尝试对流行游戏中使用的颜色进行逆向工程。
请参阅此低质量屏幕截图作为示例:
左侧是“覆盖面”,具有背景颜色和覆盖层,右侧只是背景。
我的平台在技术上是简单的 HTML 和 CSS,我使用 Firefox,但我希望我能使用的任何技术都能转移到大多数平台。
我在互联网上查找,发现了“颜色混合模式”和“颜色混合模式”,但除了可用的选项之外,我无法找到有关每种模式背后的数学信息。
此外,我简单的测试看看这是否是一个简单的加法问题也不起作用:
Given RGBA values X, Y and Z, mix(X, Y) = Z.
X = rgba(32, 34, 35, 1.0)
Y = rgba(124, 123, 123, 0.65)
Z = rgba(93, 92, 93, 1.0)
Test: (X.r)(X.a) + (Y.r)(Y.a) = Z.r
32 * 1 + 124 * 0.65 = 156.65
We can also rule out that it isn't multiplication, division or any sort of basic operation here.
There's either a non-simple formula or a coefficient being …Run Code Online (Sandbox Code Playgroud) overlay reverse-engineering colors transparent background-color
我想在某个寄存器上放置一个断点,只要该寄存器保存指定的值,该断点就会触发。
在以下示例中:
mov eax,10
mov ebx,12
inc eax
dec eax
Run Code Online (Sandbox Code Playgroud)
伪代码:
bp @eax=0x10
Run Code Online (Sandbox Code Playgroud)
我想在第 1 行和第 4 行处中断。
注意:我不想只在某个地址上创建断点。
assembly ×2
debugging ×2
python ×2
64-bit ×1
algorithm ×1
bochs ×1
bytecode ×1
c ×1
call-graph ×1
colors ×1
cryptography ×1
disassembly ×1
encoding ×1
encryption ×1
gdb ×1
graph ×1
ida ×1
ollydbg ×1
overlay ×1
python-2.7 ×1
python-3.x ×1
radare2 ×1
system-calls ×1
transparent ×1
windbg ×1
x86 ×1
x86-64 ×1