Microsoft Visual Studio--common--MSDev98--Bin—MSDEVEXE,通过此路径找到MSDEVEXE可执行文件(或者右击桌面VC图标,选择打开文件位置)。
右键--属性--常规,将MSDEVEXE更名为MSDEV1EXE(其它名称也行,如MSDEV2EXE)
右键--属性--兼容性,兼容模式选择Windows XP(service pack2)"或者WindowsXP(service pack3)权限等级勾选为“以管理员身份运行此程序”,点击确定。
重新运行VC60,应该可以完美运行(如果第一次报错,那么关闭,重新打开应该就可以了)。
方法:一个字节一个字节的与一个随机字节异或
特征:导出函数中datadiv_decode000000000000000
这里分为三种情况来介绍:
我们可以使用010editer把值异或回去
以上方法用作静态分析也可以看到,但是效率太低了
这里我们考虑使用frida去找到已经解密在内存中的数据查看
简单改改类型得到以下信息:
IDA静态直接进去到37050地址,发现是一个data段的加密数据,这个数据在运行时是已经解谜的,所以直接去hook查看这个地址的值即可
实际上是在init_array中的函数解密字符串,完成后在内存中就是明文状态了
但是解密函数依旧会出现在init_array节区
可以看到函数名已经变化了,不同于标准的函数名
但是这里用类似的方式进行处理
我们在回到JNI_Onload中找到解密出来字符串指针
知道它是五个长度直接转为六个长度的字节数组
这里在ida中看到的也是加密后的,可以看到右边有这个字符串解密的函数引用,这就是对应我们刚开始在init_array中的字符串解密函数
由于我们刚才将这里的长度定义为了一个六个字节长度的数组,所以这里F5一下可以看到如下:
综上可得在这个解密函数中,每一次换了随机的异或常量,这里就代表有一个新的字符串
这个玩意儿只是异或的不同写法,和上面的异或一个道理,且仅存在与arm64中
解密函数就出现在使用字符串的前面,在哪里用那里解密
这里也是很明显的特点
这都是处于bss段,意味着一开始没有初始化,只是一个引用放在这里
面对这种东西我们自然也是可以用frida去hook查看这个(0x3E195)位置的值
或者用hook libartso去hook住RegisterNative
函数,再或者偷个懒用jnitrace即可hook关键函数,拿到解密后的字符串
这种 *** 作他的解密函数可以很复杂,也不要求解密后的大小等于加密后的大小
回看前两种处理方式,都是简单异或 *** 作完成的,数据都是处于data段,异或完成后依旧是放在原位置的,程序真正运行前已经解密完成,第三种方式是独立的bss段存放解密后的字符串,即运行到指定位置后才开始解密
最后补充一句:
frida的inlinehook对于thumb指令不太稳定(主要就是这种两字节的指令不一定成功)
arm 和 arm64 都不错(四字节都没问题)
对ios应用加固有两种实现方式。
一种使用安全编译器基于LLVM编译器中间层实现。基于 LLVM 的保护方案,在使用时需要更换已有的编译环境,替换编译器,调整编译选项等,对开发环境造成了很多影响,易用性差。从保护效果上看,基于 LLVM 的保护方案,受限于编译器框架,生成的代码只能做逻辑上的混淆变换,仍然可以被反编译,对控制流的混淆效果有限,且边界清晰,更容易被分析。
反编译效果OLLVM 保护后反编译效果:
一种使用VirboxProtector 虚拟化保护。ARM 虚拟化是 Virbox Protector 针对 ARM 架构的指令推出的虚拟机保护方式,通过将原始的 ARM 指令进行翻译,转换为自定义的虚拟机指令,运行时在自定义虚拟机执行。Virbox Protector 实现了针对 ARM 指令的虚拟机保护工具,支持对armv7(包括 thumb, thumb2),及 armv8 以上指令集进行翻译,安全强度高,适用于需要高安全性的代码保护需求。通过虚拟化保护后的代码无法被反编译。
Virbox Protector 保护后反编译效果:以上就是关于windows 7 x64用cmake,mingw32安装LLVM,编译时报错MemoryBuffer.cpp:381:25: error全部的内容,包括:windows 7 x64用cmake,mingw32安装LLVM,编译时报错MemoryBuffer.cpp:381:25: error、关于ollvm字符串加密那些事、iOS代码加密的几种方式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)