标签: reverse-engineering

反向设计一个网页

我希望将任何网页逆向工程化为页面的逻辑表示.例如,如果一个网页有一个菜单,那么我想要一个逻辑菜单结构,也许是XML.如果网页上有一篇文章,我想要一篇文章XML节点,如果它有文章的标题我想要一个标题XML节点.基本上,我想要没有任何用户界面的网页的逻辑形式.

这个逻辑模型既可以是代码中的对象,也可以是XML无关紧要,重要的是它已经识别出页面上的所有内容.

webpage reverse-engineering

6
推荐指数
1
解决办法
701
查看次数

使用较旧调试版本中的符号来标记剥离的二进制文件(不精确的图形匹配)

我有二进制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)

algorithm reverse-engineering graph call-graph

6
推荐指数
1
解决办法
385
查看次数

如何保护解密密钥免受反编译?

我是初学java程序员.我正在开发一个解密一些数据的应用程序.解密密钥被硬编码到软件中,因此可以通过分析字节码来看到.

我知道逆向工程不能完全防止,所以我要做的是尽可能地使这个过程变得更加困难.

我的想法不是直接将密钥放入我的代码中,而是让它经历某种转换.例如,我可以写 -

private static final byte[] HC256A = Hex
            .decode("8589075b0df3f6d82fc0c5425179b6a6"
                    + "3465f053f2891f808b24744e18480b72"
                    + "ec2792cdbf4dcfeb7769bf8dfa14aee4"
                    + "7b4c50e8eaf3a9c8f506016c81697e32");
Run Code Online (Sandbox Code Playgroud)

这样,看字节码的人无法立即读取它.但是必须遵循逻辑并对其应用转换,这在字节级别上不会那么容易.

那你觉得怎么样?这有用吗?除十六进制解码之外,最好的转换是什么?是否有其他方法可用于保护硬编码的解密密钥?

谢谢你的所有建议.

java security encryption drm reverse-engineering

6
推荐指数
1
解决办法
1497
查看次数

有没有办法进行批量地理编码(按地址获取lat/lon,反之亦然)?

Google地理编码API有严重的限制(每天2,500个请求),我们总是会遇到限制错误.他们的营业执照花费10,000美元,对我们来说太贵了.
服务应与不同语言和不同国家合作.
服务应验证地址并返回lat/lng.地址可以是具有不同格式的字符串.

我们已准备好为此类服务付费,最好使用RESTful API.

geocoding reverse-engineering google-geocoding-api

6
推荐指数
3
解决办法
7417
查看次数

逆向工程:从apk中提取图像/精灵表

我正在学习游戏开发,我正在尝试从一些我喜欢玩的游戏中提取一些资源,我这样做只是为了更多地了解精灵和资源组织.问题是每个游戏我提取的图像都带有某种问题,有时只是不打开,有时我可以打开图像,但我只看到一些像素.

在apk市场中是否使用了任何资源保护?有没有办法提取和看到这些精灵表?

请记住,我这样做仅仅是为了学习目的,我不会在任何游戏或项目中使用它!

感谢您的帮助,并有一个美好的一天球员:).

android reverse-engineering sprite sprite-sheet apk

6
推荐指数
1
解决办法
1万
查看次数

如何对C库进行逆向工程?

假设我在Linux上有一个动态库(.so).我还有一个使用该库的现有应用程序.图书馆被剥离了.我想为库生成一些(近似的)头文件,以便我可以编写另一个使用它的程序.

使用objdump来查看库中的函数是很容易的,并且ltrace可以查看正在进行的每个调用.

我如何弄清楚函数参数是什么?

一些想法:我可以使用LD_PRELOAD或dlsym类型技巧来加载一个shim库,它可以在原始库中调用任何函数时查看堆栈.我也可能在转储寄存器的垫片中做一些事情(这是在ARM上,所以我认为它是r0-r3).有了更多的工作(通过查看反汇编),有可能还可以确定寄存器是否包含将被解除引用的指针,然后让shim函数转储该指针处的内容.

从那里开始似乎是一个很大的步骤"这个函数将第一个参数作为带有以下字段的struct的指针......"是否有任何自动化工具可用于此类事情?

注意:我对函数的工作方式一无所知,只关注如何为它们提供正确的数据.

c dll reverse-engineering disassembly

6
推荐指数
1
解决办法
2009
查看次数

使用IDA PRO 6.1的DEbug x64应用程序

我有IDA PRO 6.1 - (我无法安装最新版本)

我试图用bochs调试器或windgb调试x64应用程序.

我做了以下事情:

  1. 安装了Bochs-2.4.6
  2. 安装了x86和x64版本的windows调试器.
  3. 确保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并设置默认连接字符串也不起作用.

debugging 64-bit reverse-engineering ida bochs

6
推荐指数
1
解决办法
6795
查看次数

在分析从Swift编译的二进制文件时,是否有可能找出没有符号的函数的Swift方法名?

我是新手拆解和逆向工程二进制文件,所以请原谅我这个问题是荒谬的还是不可能的.

过去当我尝试逆向工程macOS二进制文件时,分析用Objective-C编写的文件会产生很多有用的信息,因为通常所有的Objective-C类及其方法名都很容易检索,这使得它变得容易多了找出任何特定方法的作用.

我正在尝试分析用Swift编写的二进制文件(技术上是Swift和Objective-C的组合),现在大多数函数都没有符号.我可以像往常一样检索一些Objective-C方法,以及一些具有Swift风格的错位名称的函数,但几乎所有其他函数都没有符号.我知道很多都必须是Swift方法.

无论如何都要弄清楚这个二进制文件的Swift类是什么以及它们与Objective-C一样的相关方法?

使用像Hopper Disassembler这样的工具可以显示一些Swift类的名称(通常是符号_TtC4Something25SomethingElse),我可以得到它的实例变量名称及其偏移量的列表,但没有方法名称.

注意:有问题的二进制文件是x64 macOS二进制文件,而不是iOS二进制文件.

reverse-engineering objective-c disassembly swift

6
推荐指数
1
解决办法
567
查看次数

如何计算给定背景和叠加背景的透明叠加层的颜色和不透明度?

我正在尝试对流行游戏中使用的颜色进行逆向工程。

请参阅此低质量屏幕截图作为示例:

左:#484947 右:#343737

左侧是“覆盖面”,具有背景颜色和覆盖层,右侧只是背景。

我的平台在技术上是简单的 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

6
推荐指数
1
解决办法
705
查看次数

Windbg 寄存器值上的断点

我想在某个寄存器上放置一个断点,只要该寄存器保存指定的值,该断点就会触发。

在以下示例中:

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 行处中断。

注意:我不想只在某个地址上创建断点。

debugging x86 assembly windbg reverse-engineering

6
推荐指数
1
解决办法
621
查看次数