标签: reverse-engineering

您将如何对从设备中提取的一组二进制数据进行逆向工程?

我的一个朋友,他有一天提出这个问题,他最近买了一个garmin心率监测设备,跟踪他的心率,并允许他将他的心率统计数据上传一天到他的电脑.

唯一的问题是没有用于garmin USB设备的linux驱动程序,他设法解释了一些数据,例如型号和他的用户详细信息,并且已经确定存在一些二进制数据表,我们假设它们代表一系列记录他的心率和录音的时间.

当你对结构一无所知时,在逆向工程数据的哪一个开始?

binary reverse-engineering binary-data

8
推荐指数
1
解决办法
978
查看次数

反向工程C++ DLL

我有一个小实用程序,最初是用VS2005编写的.

我需要进行一些小改动,但其中一个dll的源代码已经丢失了.

是否有免费或价格合理的工具将dll反向工程回C++代码.

c++ dll winapi reverse-engineering

8
推荐指数
2
解决办法
2万
查看次数

通信协议的逆向工程

只是好奇 - 通信协议的逆向工程有哪些自动甚至半自动技术?

当一个人嗅探流量并试图理解协议时,我特别感兴趣.

我可以找到一些关于学者的论文,但根据我的经验,大多数时候这是一个完全手动的过程.

如果有人有这方面的经验并且感觉分享,那将非常感激.

communication protocols reverse-engineering

8
推荐指数
1
解决办法
946
查看次数

为什么在Windows Server 2008 x64上重命名reg.exe会导致它无法运行?

我在这里有一个很好的问题.

有一个名为reg.exe的实用程序已经与Windows一起提供了很长时间.从脚本导入.reg文件,从脚本修改值等等非常方便.所以在为脚本场景制作副本时("为什么不在system32中使用副本?" - >软件限制策略,个人首选等等)我注意到重命名它会让它无声地失败:

Windows Server 2008 x64:

Microsoft Windows [Version 6.0.6001]
Copyright (c) 2006 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>reg.exe
ERROR: Invalid syntax.
Type "REG /?" for usage.

C:\Windows\system32>copy reg.exe reg2.exe
        1 file(s) copied.

C:\Windows\system32>reg2.exe

C:\Windows\system32>reg2.exe /?


C:\Windows\system32>reg.exe /?

REG Operation [Parameter List]

  Operation  [ QUERY   | ADD    | DELETE  | COPY    |
               SAVE    | LOAD   | UNLOAD  | RESTORE |
               COMPARE | EXPORT | IMPORT  | FLAGS ]

Return Code: (Except for REG COMPARE)

  0 - Successful
  1 …
Run Code Online (Sandbox Code Playgroud)

rename reverse-engineering crt windows-server-2008

8
推荐指数
1
解决办法
2041
查看次数

代码理解,逆向工程,最佳概念和工具.Java的

对于任何程序员来说,架构师最苛刻的任务之一就是理解其他代码.

例如,我是承包商,雇用来快速救出一些项目.修复错误,计划全局重构,因此我需要最有效的方式来理解代码.什么是概念列表,它们的优先级和最佳工具?

据我所知:反向代码工程来创建对象模型(每个包创建图表不太方便),创建序列图(该工具以调试模式连接到系统并从运行时生成图表).一些可视化技术,使用一些工具不仅可以使用,.java而且还可以使用JPAHibernate.为所有代码库生成图表,但添加一些类,然后添加它使用的类.

Sparx Enterprise Architect是逆向工程中最先进的技术还是远离它?还有其他更好的工具?理想情况下,该工具会让我理解代码,好像我自己写的那样:)

java uml reverse-engineering

8
推荐指数
2
解决办法
3906
查看次数

如果源代码可以进行逆向工程,那么加密Android(或Java)中的任何内容有什么意义?

Android和Java提供了一个加密API,相对来说非常容易用于加密非专家.

但是既然我们知道没有任何代码可以真正受到保护免受逆向工程,特别是用作种子或共享机密的字符串常量,我想知道:在Android应用程序中经历加密和解密的磨难有什么意义?

我错过了什么吗?

试图让我的问题更清晰,更具体:假设我已经在使用特定字符串的应用程序通过代码,代码(即没有用户数据)必须是秘密的:一种方法是将它们存储在加密的形式在编译.apk并在运行时解密它们(使用模糊的硬编码密码).另一种方法是将它们以加密形式存储在远程服务器中,在运行时获取它们(通过Internet)并解密(使用共享密码)它们.

我认为两者之间没有太大的区别,因为两者都要求(反向工程)代码中存在"密钥".

有这个问题的解决方案吗?

如果没有解决方案,为什么要加密?

java encryption android decompiling reverse-engineering

8
推荐指数
1
解决办法
4039
查看次数

反向设计Xbox One Smartglass应用程序的API授权标头

由于微软决定将Xbox Live用户的个人资料页面置于登录墙之后,出于某些愚蠢的原因,我不得不寻找其他方法来确定Xbox Live用户是否在线.

为此,我使用了mitmproxy来确定iOS版Xbox One Smartglass应用程序的请求.似乎对于任何需要身份验证的请求,应用程序使用"XBL3.0 x = {computed auth token}"填充"身份验证"标头字段.

我已想出的是,应用程序通过执行一个POST请求来获取接入令牌https://login.live.com/oauth20_token.srf并传递形式的编码数据,其中所述属性中的一个是用户的"refresh_token".您可以通过使用mitmproxy查看任何这些请求来获取此刷新令牌.

然后,应用程序继续向https://user.auth.xboxlive.com/user/authenticate发送POST请求,传递我无法确定其来源的各种信息.以下是此请求的示例JSON有效内容:

{
    "Properties": {
        "AuthMethod": "RPS", 
        "RpsHeader": "<data removed for safety>", 
        "RpsTicket": "<data removed for safety>", 
        "SiteName": "user.auth.xboxlive.com"
    }, 
    "RelyingParty": "http://auth.xboxlive.com", 
    "TokenType": "JWT"
}
Run Code Online (Sandbox Code Playgroud)

此请求的响应包含以下JSON:

{
    "DisplayClaims": {
        "xui": [
            {
                "uhs": "<data removed for safety>"
            }
        ]
    }, 
    "IssueInstant": "2014-08-02T23:44:56.5868148Z", 
    "NotAfter": "2014-08-16T23:44:56.5868148Z", 
    "Token": "<data removed for safety>"
}
Run Code Online (Sandbox Code Playgroud)

连接在一起的"uhs"和"token"的内容似乎是"XBL3.0 x ="授权标头中缺少的身份验证令牌.

问题是我对微软的网络堆栈完全不熟悉,经过几个小时的搜索,我无法弄清楚"RpsHeader"和"RpsTicket"的价值来自哪里.

reverse-engineering xbox windows-live-id mitmproxy xbox-one

8
推荐指数
1
解决办法
2534
查看次数

我该如何扭转这种看似简单的算法?

我有一些旧的LED板,你可以发送一些文本并将其挂在某处...它是在1994/95制造的,它通过串行端口进行通信,使用16位MS-DOS应用程序,你可以在其中输入一些文字.

所以,因为你可能无法在任何地方运行它,除非使用DOSBox或类似的技巧,我决定用C#重写它.

在对原始的dos-exe进行端口监视之后,我发现它对你重建它真的不感兴趣 - 必须回答请求,变化的字节,预先发送的"ping"消息等等......

也许你知道类似我的dos-exe使用的校验和例程/模式,或者你可以提供任何关于尝试逆向工程的技巧...另外,因为我只熟悉编程而且没有花太多时间在反转方法上和/或分析协议,如果这个主题有点愚蠢的想法,请不要判断我 - 我会很高兴得到任何帮助......

真正包含应该显示的文本的消息是143个字节长(只是那么长,因为如果你没有用尽你的文本的所有空间它会填充填充字节),并且在那个消息中我注意到以下模式:

  • 第四个字节(仍属于msg标头)与6或7个重复值的列表不同(在我的示例中,该字节始终为0F).

  • 最后两个字节用作校验和

一些例子:

  • 显示文字:"123"(十六进制:"31 32 33"),校验和十六进制:"45 52"
  • 文本:"132"("31 33 32"),校验和十六进制:"55 FF"
  • 文本:"122"("31 32 32"),校验和十六进制:"95 F4"
  • 文字:"133"("31 33 33"),校验和十六进制:"85 59"
  • 文本:"112"("31 31 32"),校验和十六进制:"C5 C8"
  • 文字:"124"("31 32 34"),校验和十六进制:"56 62"
  • 文字:"134"("31 33 34"),校验和十六进制:"96 69"
  • 文字:"211"("32 31 31"),校验和十六进制:"5D 63"
  • 文本:"212"("32 31 32"),校验和十六进制:"3C A8"
  • text:{empty},校验和hex:"DB BA"
  • text:"1"("31"),校验和hex:"AE 5F"

到目前为止,我完全确定校验和确实依赖于标头中的第四个字节,因为如果它发生变化,则校验和将完全不同,以便显示相同的文本.

这是一个显示"123"的完整143字节字符串的示例,仅用于为您提供更好的方向:

02 86 04 0F 05 03 01 03 01 03 01 03 00 01 03 00   ...............
00 31 00 32 00 33 …
Run Code Online (Sandbox Code Playgroud)

c# reverse-engineering

8
推荐指数
1
解决办法
216
查看次数

保护Android App免受逆向工程

我想100%保护我的应用程序并且不希望黑客进入内部.

这些是我从Stack Overflow中找到的解决方案.

  1. 在应用程序中集成Proguard.

  2. 在C/C++中保留代码中最重要的部分.

  3. 使用NDK将代码本机编写到.So文件中.

  4. 使用MD5加密api密钥.

那么有没有其他方法可以完全保护我的Android应用程序免受黑客攻击,或者这是上述提到的最佳解决方案.

这些是我发现的参考文献

如何避免APK文件的逆向工程?

如何防止Android APK文件的逆向工程以保护代码?

security android reverse-engineering

8
推荐指数
2
解决办法
7464
查看次数

什么是确定英特尔Kaby Lake架构上最后一级缓存未命中数的确切代码

我读了一篇有趣的论文,名为"对最后一级缓存的高分辨率侧通道攻击",并希望找到我自己机器的索引哈希函数 - 即Intel Core i7-7500U(Kaby Lake架构) - 遵循这项工作的线索.

为了对散列函数进行逆向工程,本文提到了第一步:

 for (n=16; ; n++) 
 {
   // ignore any miss on first run
   for (fill=0; !fill; fill++) 
   {
     // set pmc to count LLC miss
     reset_pmc();
     for (a=0; a<n; a++)
       // set_count*line_size=2^19
       load(a*2^19);
   }

   // get the LLC miss count
   if (read_pmc()>0) 
   {
     min = n;
     break;
   }
 }
Run Code Online (Sandbox Code Playgroud)

我如何编写代码reset_pmc(),并read_pmc()在C++?从我到目前为止在线阅读的所有内容来看,我认为它需要内联汇编代码,但我不知道用什么指令来获取LLC未命中数.如果有人可以为这两个步骤指定代码,我将不得不承担责任.

我在VMware工作站上运行Ubuntu 16.04.1(64位).

PS:我发现这些记载LONGEST_LAT_CACHE.REFERENCESLONGEST_LAT_CACHE.MISSES在第18的的3B卷英特尔架构软件开发手册,但我不知道如何使用它们.

c++ x86 caching reverse-engineering perf

8
推荐指数
1
解决办法
575
查看次数