标签: reverse-engineering

你最喜欢的反调试技巧是什么?

在我以前的雇主,我们使用了第三方组件,它基本上只是一个DLL和一个头文件.该特定模块在Win32中处理打印.然而,制造该组件的公司破产了,所以我无法报告我发现的错误.

所以我决定自己修复bug并启动调试器.我很惊讶地发现几乎所有的反调试代码都是常见的IsDebuggerPresent,但引起我注意的是:

    ; some twiddling with xor 
    ; and data, result in eax 
    jmp eax 
    mov eax, 0x310fac09 
    ; rest of code here 
Run Code Online (Sandbox Code Playgroud)

乍一看,我刚刚跨过了被叫两次的例程,然后事情就变成了香蕉.过了一会儿,我意识到这个小小的结果总是一样的,即jmp eax总是跳到mov eax, 0x310fac09指令中.我解剖了字节,那里是用于测量DLL中某些调用之间花费的时间0f31rdtsc指令.

所以我的问题是:你最喜欢的反调试技巧是什么?

debugging x86 assembly reverse-engineering

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

发布一个游戏MMORPG的程序,在道义上是否可以辩护?

我大概编写了一些第一个修改流行的新MMORPG内存的代码,以创建一个宏框架,允许高级自动反应,技能/等级增益,大规模数据检索和僵尸.

以这种方式自动执行任务是我的最高荣幸,我不禁想到任何手动方法都是"破碎".事实上,我发现自己甚至无法在解剖他们的机制和游戏之前完成甚至单人游戏,只有一种特定的只读(不是作弊,本身)鼠标和键盘输入方式.用我自己的编程知识补充我对游戏相关目标的进步似乎很自然,否则就像在FPS中忽略你的枪支一样真的不好玩.

由于我喜欢这种形式的逆向工程,我认为其他人也这样做,他们至少会欣赏最终结果.我倾向于认为一个项目应该以某种方式"运送":被出售,开源或自由分发."独乐乐不如众乐乐." 否则它只是我和我的时间.

问题是,有参与这种性质的项目数的道德立场:

  1. 虚拟世界释放出一种邪恶.拥有该计划的人有一个优势,游戏是不平衡的,你必须使用,只是为了平等.它不再是游戏,而是工具,军备竞赛.就像其他MMORPG一样.因此,请将代码保密.

  2. 以上是不可避免的,所以发布一个强制性的免费发行,让玩家可以平等地获得优势,并可能拒绝其他人更加邪恶(例如精英​​,商业等)的发布.在邪恶之间选择最少,尽管它的必要性是令人不快的.

  3. 出售该计划,从您的倾向中获益,这是您应该得到补偿,公平交易(以及不管ToS违规行为)的工作.关注WoWGlider.更少的手更好吗?

  4. 保持代码私密.至少尊重您同意的公司服务条款.

什么是道德上可辩护的方法?我没考虑过什么?根据我的经验,ToS协议在很大程度上是无效的劝阻形式,而MMORPG的游戏(以及随后在#1中描述的结果)确实是不可避免的,但是有一些事情要说不要自己拉动扳机 - 或者说它不是那么糟糕?


我对这个问题的原始措辞/标题做得不好,我真的想看看是否有特殊情况可以在道德上防御,而不是通常是否正常,希望我的代码可以有建设性的目的.

作为一个新用户,在我更新之前,我没有意识到99%的回复是立竿见影的.也就是说,我仍然收到了一些关于商业化的非常有用的答案,原始问题值得提供答案,因此:在这方面做得很好.

有我的答案是:尽管机器人的必然性,不要自己扣动扳机!做出改变等等(对于我个人而言,#3永远不会出现在桌面上,但引出了一些精彩的答案.)

reverse-engineering botnet

25
推荐指数
4
解决办法
1832
查看次数

将ASM转换为C(不是逆向工程)

我用谷歌搜索,我看到一个惊人的轻浮反应,基本上嘲笑提问者问这样的问题.

Microchip免费提供一些源代码(我不想在这里发布,以防万一.基本上,谷歌AN937,点击第一个链接,有一个链接"源代码"及其压缩文件).它在ASM中,当我看到它时,我开始睁大眼睛.我想将它转换为类似ac类型语言的东西,以便我可以跟随它.因为行如:

GLOBAL  _24_bit_sub
movf    BARGB2,w
subwf   AARGB2,f
Run Code Online (Sandbox Code Playgroud)

可能很简单,但它们对我毫无意义.

必须有一些自动ASM到C的翻译器,但我能找到的是人们说它不可能.坦率地说,它不可能是不可能的.两种语言都有结构,这种结构肯定可以翻译.

谢谢.

c embedded assembly reverse-engineering microchip

24
推荐指数
7
解决办法
7万
查看次数

如何从dll文件中提取类的源代码?

有没有软件可以做到这一点?我没有在互联网上找到任何有用的信息,所以我在这里问.

c# asp.net dll reverse-engineering source-code-protection

24
推荐指数
4
解决办法
9万
查看次数

如何使用bluez在Linux上通过蓝牙4.0 LE连接到FitBit Zip?

我买了一个FitBit拉链.此设备使用蓝牙4.0 LE.我想至少通过bluez连接到它.如果成功,我想知道我能找出多少协议.

我使用的是联想P500 Ideapad,它集成了对蓝牙4.0的支持.它似乎工作(种类)

当我做:

hcitool lescan
Run Code Online (Sandbox Code Playgroud)

我能够找到设备的蓝牙地址,虽然可能无关紧要,但是:CF:D9:24:DB:F4:7B

现在,我在另一个问题中读到:蓝牙低功耗:在linux监听通知/指示我可以收听通知和其他协议功能.我曾经使用旧蓝牙,但我没有使用蓝牙LE的经验.

我试图使用hcitool leccgatttool连接到设备时遇到困难.连接超时并且似乎在Linux机器上使蓝牙处于不良状态.我能够通过重新加载蓝牙相关的内核模块来解决这个问题.

任何提示都表示赞赏.我现在正在尝试最新的bluez.

linux reverse-engineering fitbit bluez

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

免费的UML序列图逆向工程eclipse插件开箱即用 - 这样的事情存在吗?

我尝试过(虽然不是非常全面)许多解决方案,包括ModelGoon(仅提供类和交互图),ObjectAid(仅限类图),eUML免费版(首次使用时退出带有不祥的"许可证未找到"错误),MoDisco(带有菜单上唯一的选项是"浏览相应的模型元素").还有一些独立的工具--ArugUMLBOUML要么不提供此功能,要么至少我无法找到它.Jsonde只是在我修复了msvcr71.dll错误之后开始,然后由于未知的原因无法连接到VM ​​... Java Call Tracer只是一堆文件,其中包含可直接应用于JVM的选项页面而且没有可执行...

我还阅读了关于该主题的以下帖子:具有商业选项,太笼统(不是序列图),也太笼统,具有独立的商业解决方案

通过开箱即用,我的意思是 - 默认安装没有被打破,并且有一个选项,如"生成序列图"或类似的结果,导致(可修改的将是伟大的)序列图.

我得到的印象是,没有这样的东西(还有?)作为一个免费的UML序列图逆向工程eclipse插件开箱即用.

请证明我错了.谢谢

eclipse uml eclipse-plugin reverse-engineering sequence-diagram

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

保护字符串不变以防逆向工程

我有Android应用程序,它具有硬编码(静态字符串常量)凭据(用户/通行证),用于通过SMTP发送电子邮件.

问题是.apk中的.dex文件可以很容易地进行逆向工程,每个人都可以看到我的密码.

有没有办法如何保护这些凭据,而我仍然可以在我的课程中使用它们?

java security android reverse-engineering credentials

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

原始浮点编码

更新 原始问题不再是这个问题的适当问题,所以我将单独留下来展示我尝试/学习的内容和背景.很明显,这不仅仅是一个"Base64变种",而且涉及的更多一些.

背景: 我在python 3.x中编程主要用于开源程序Blender.我是新手/业余级程序员,但我很了解大概念我已经阅读了与我的问题相关的这些文章.

问题: 我有一个二进制文件,其中包含对应于每个顶点(浮点数)的x,y,z坐标的3d网格数据(浮点列表和整数列表)以及构成网格面的顶点索引(整数).该文件以xml'ish的感觉组织......

<SomeFieldLabel and header like info>**thensomedatabetween**</SomeFieldLabel>
Run Code Online (Sandbox Code Playgroud)

以下是"顶点"字段中的示例

<Vertices vertex_count="42816" base64_encoded_bytes="513792" check_value="4133547451">685506bytes of b64 encoded data
</Vertices>
Run Code Online (Sandbox Code Playgroud)
  1. " 顶点 "和" /顶点 " 之间有685506个字节的数据
  2. 这些字节只包含aa,AZ,0-9和+,/,这是base64的标准
  3. 当我抓住那些字节,并在python中使用标准的base64decode时,我得到了513792个字节
  4. 如果可以认为vertex_count ="42816",则表示每个顶点的x,y,z需要42816*12bytes.42816*12 = 513792.优秀.
  5. 现在,如果我尝试将解码后的字节解压缩为32位浮点数,我会得到垃圾......所以有些东西是ammis.

我在想某处有一个额外的加密步骤.也许有翻译表,旋转密码或某种流密码?奇怪的是,字节数是正确的,但结果不应该限制可能性.有任何想法吗?以下是两个示例文件,文件扩展名更改为*.mesh.我不想公开这种文件格式,只想为Blender编写一个导入器,这样我就可以使用这些模型了.

这是两个示例文件.我从Vertices和Facets字段中提取了原始二进制文件(不是b64解码),并从公司提供的此类文件的"Viewer"中提供了边界框信息.
示例文件1

示例文件2

关于"顶点"字段的注释

  • 标头指定vertex_count
  • 标头指定base64_encoded_bytes,它是发生base64编码时的字节数
  • 标题指定"check_value",其重要性尚未确定
  • 该字段中的数据仅包含标准base64字符
  • 在标准base64解码之后,输出数据具有... length = vertex_count*12 = base64_encoded_bytes.偶尔b64输出中还有4个额外的字节? - 编码/解码字节的比率是4/3,这也是典型的base64

关于Facets字段的注释

  • 标头指定了facet_count
  • 标头base64_encoded_bytes,它是发生base64编码时的字节数

  • base64_encoded_bytes/facet_count的比例似乎变化很大.从1.1到大约1.2.如果它们被编码为对应于顶点索引的3x4byte整数,我们期望比率为12.因此要么对此字段进行补充,要么使用三角形条保存模型,或者两者都保存 : - /

更多窥探
我打开了viewer.exe(在十六进制编辑器中),由公司提供查看这些文件(也是我获得边界框信息的地方).以下是我发现有趣的一些片段,可以进一步搜索.

f_LicenseClient ......我@ …

python reverse-engineering 3d-model

23
推荐指数
1
解决办法
2200
查看次数

如何解码PDF流?

我想分析使用编码的PDF文件中的流对象/FlateDecode.

是否有任何工具可以解码PDF中使用的此类编码(ASCII85decode,LZWDecode,RunlenghtDecode等)?

流内容很可能是PE文件结构,PDF可能稍后将在漏洞利用中使用.

此外,xrefPDF中有两个表,这是正常的,但也有两个%%的EOF xref.

这些存在是否正常?(注意:第二个xref指向xref使用/prev名称的第一个.

xref指的是第二个xref:

xref 
5 6
0000000618 00000 n
0000000658 00000 n
0000000701 00000 n
0000000798 00000 n
0000045112 00000 n
0000045219 00000 n
1 1
0000045753 00000 n
3 1
0000045838 00000 n
trailer
>
startxref
46090
%%EOF

第二个xref:

xref
0 5
0000000000 65535 f
0000000010 00000 n
0000000067 00000 n
0000000136 00000 n
0000000373 00000 n
trailer
>
startxref …

pdf adobe exploit reverse-engineering malware

23
推荐指数
3
解决办法
3万
查看次数

JNZ和CMP装配说明

如果我错了,请纠正我.

这是我对JNZ和的理解CMP.

JNZ- 如果Z标志不为零,将发生跳转(1)

CMP- 如果两个值相等,Z则设置标志(1),否则不设置(0)

Olly DBG

这是我正在观看的flash教程.它正在教一个简单的CrackMe解决方案.

如您所见,前面的指令AL与之比较47h.他们是平等的,设置了Z旗帜.(你可以在右侧的Registers窗口中看到它)

下一条指令是a JNZ.我的理解是,如果Z设置了标志,将发生跳转.该Z标志设置,但跳就不会发生!

为什么?

x86 assembly reverse-engineering cmp ollydbg

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