我知道没有办法完全保护我们的代码.我也知道,如果用户想要破解我们的应用程序,那么他或她不是购买我们的应用程序的用户.我也知道改善我们的应用程序更好..而不是害怕防裂技术.我也知道没有商业工具可以保护我们的应用....我也知道....
好.足够.我听到了一切.我真的认为增加一点保护不会受到伤害.
所以....你曾经使用过来自oreans或vmprotect的代码virtulizer吗?我听说他们有时被某些杀毒软件检测为病毒.
在购买之前我应该注意的任何经验.我知道它会创建一些虚拟机并对代码进行模糊处理,以便更难找到注册例程的弱点.
有什么警告我应该知道吗?
谢谢.任何意见,将不胜感激.
乱切
我写了一个以这种方式加密文本的应用程序:
获取输入文本
翻译文字
转换为十六进制
与钥匙的XOR
Base64编码
现在,我自己没有进行大量的加密/编码,所以我的问题可能听起来很愚蠢,但是,我说我得到的文件中包含上述算法的内容而且我不知道这个算法.如何开始"打破"文本,是否有任何指导方针,原则,规则可以遵循?
我的问题与这5个步骤无关,这是一个纯粹的例子.
作为另一个例子,取文字:A751CD9E1F99.我该如何开始调查这可能意味着什么?
我目前正在尝试对一个缺乏文档的私有REST-Web服务进行逆向工程.我唯一知道的是,它是用PHP编写的,使用ZendFramework.是否有任何简单的方法可以找出,允许哪些操作以及我必须提供哪些参数才能使服务正常工作?
招呼,罗布
有哪些工具可用于从一组.h-或.cpp文件创建UML 类图?
我在寻找......
为什么以下汇编代码是反调试工具?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
Run Code Online (Sandbox Code Playgroud)
我知道C3h是RETN,我知道根据偏移量stobs将值al作为操作码写入,edi并且ecx因为时间而完成rep.
我也知道的事实,stobs并stosw会如果他们是基于英特尔架构的预取为原来的形式进行.
如果我们以调试模式运行程序,预取是无关紧要的,并且l2标签将运行(因为它是单步)否则如果没有调试器它将在l1和l3之间打乒乓我对吗?
阅读后如何保护Python代码?,我决定在Windows上尝试一个非常简单的扩展模块.我之前在Linux上编译了自己的扩展模块,但这是我第一次在Windows上编译它.我期待得到一个.dll文件,但相反,我得到了一个.pyd文件.Docs说他们有点相同,但它必须有一个init[insert-module-name]()功能.
假设它是安全的,像dll文件一样难以对它们进行反向工程.如果没有,那么从.pyc文件到.dll文件的规模进行逆向工程的硬度是多少?
Apple的iWork套件的早期版本使用了非常简单的文档格式:
index.apxl[z]文件,用于描述专有但相当容易理解的模式中的文档结构iWork '13完全重做了格式.文件仍然包,但什么是索引XML文件中现在在一组用型号后缀二进制文件编码.iwa打包成Index.zip.
例如,在Keynote中,有以下iwa文件:
AnnotationAuthorStorage.iwa
CalculationEngine.iwa
Document.iwa
DocumentStylesheet.iwa
MasterSlide-{n}.iwa
Metadata.iwa
Slide{m}.iwa
ThemeStylesheet.iwa
ViewState.iwa
Tables/DataList.iwa
Run Code Online (Sandbox Code Playgroud)
对于MasterSlides 1 ... n和Slides 1 ... m
从命名的角度来看,每个目的都非常明确.这些文件甚至看起来都是未压缩的,基本上所有内容文本都直接在二进制blob中作为字符串显示(尽管在可读的ASCII字符中有一些像RTF/NSAttributedString /类似相关的垃圾).
我在这里发布了Index一个简单示例Keynote文档的解压缩:https://github.com/jrk/iwork-13-format.
但是,整体文件格式对我来说并不明显.Apple长期使用简单的平台标准格式(如plist)来编码大部分文档,但文件开头没有明确的类型标记,对我来说这些iwa文件并不明显.
这些文件会响铃吗?有证据表明他们有一些合理易懂的序列化格式吗?
使用F-Script通过Keynote应用程序运行时和类转储进行翻查,我发现的唯一证据是在序列化类中使用了协议缓冲区,这些类似乎用于iWork,例如:https://github.com/ nst/iOS-Runtime-Headers/blob/master/PrivateFrameworks/iWorkImport.framework/TSPArchiverBase.h.
快速管理一些文件通过最后protoc --decode_raw的0 ... 16字节丢失产生任何明显可用的东西.
在http://cr.yp.to/primegen.html,您可以找到使用Atkin筛子生成素数的程序源.正如作者所说,回复发送给他的电子邮件可能需要几个月的时间(我明白,他肯定是一个被占领的人!)我发布了这个问题.
该页面指出'primegen可以生成高达1000000000000000的质数'.我试图理解为什么会这样.当然有一个限制,最多2 ^ 64~2*10 ^ 19(长无符号整数的大小),因为这是数字的表示方式.我肯定知道,如果存在巨大的空隙(> 2 ^ 31)那么打印数字就会失败.然而,在这个范围内,我认为没有这样的优势差距.
要么作者高估了界限(实际上它大约是10 ^ 19),要么在源代码中有一个位置,算术运算可以溢出或类似的东西.
有趣的是,你实际上可以为数字> 10 ^ 15运行它:
./primes 10000000000000000 10000000000000100
10000000000000061
10000000000000069
10000000000000079
10000000000000099
Run Code Online (Sandbox Code Playgroud)
如果你相信Wolfram Alpha,这是正确的.
我有一些"逆向工程"的事实:
我认为溢出可能发生的地方没有意义.
在安全性和设计准则去大篇幅概述的各种方法,使之更加难以攻击者危及应用内结算的实施.
特别值得注意的是.apk,即使通过Proguard进行模糊处理,对文件进行反向工程也是多么容易.因此,他们甚至建议修改所有示例应用程序代码,尤其是"已知入口点和出口点".
我发现缺少的是在单个方法中包含某些验证方法的任何引用,例如Security.verify()返回的静态boolean:一个好的设计实践(减少代码重复,可重用,更容易调试,自我记录等)但是所有攻击者现在需要做的就是找出那种方法并让它始终返回true......所以无论我使用它多少次,延迟或不延迟,随机或不随意,它都无所谓.
另一方面,Java没有像C/C++那样的宏,它允许减少源代码重复,但没有verify()函数的单个退出点.
所以我的问题:
众所周知的软件工程/编码实践与所谓安全设计之间是否存在内在争用?(至少在Java/Android /安全交易的背景下)
可以采取哪些措施来缓解"安全设计"的副作用,这种副作用似乎是"在脚下拍摄"过度复杂的软件,这些软件本来可以更简单,更易于维护和更容易调试?
你能推荐一些好的资料来进一步研究这个课题吗?
我正在尝试对用于生成校验位的算法进行逆向工程.
数字长8位,最后一位是校验位.我有成千上万的有效数字来测试它.
我尝试过标准的Luhn,Verhoeff和modulo-10算法(对所有可能的权重进行强力检查),但找不到答案!
有可能计算出来吗?有任何想法吗?
以下是有效数字的一些示例:
1002784-5
1000514-7
1001602-8
1001255-2
1001707-1
1003355-5
1005579-1
1004535-0
1004273-1
1001695-9
1004565-9
1000541-9
1001291-1
1005866-1
1004352-7
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢你们 - 遗憾的是我没有访问代码.该号码是一个税号,我需要能够验证该号码是否输入正确.从我的研究看起来大多数国家都使用非常标准的模10型系统.我可以访问大约6万个号码.
我知道问题可能无法解决,更多的是学术上的关注.