- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试修改我的 apk 中的 dex 文件以混淆我的代码。
我在 eclipse 上编译了以下代码:
boolean test = false;
SmsManager sm = SmsManager.getDefault();
if (test){ // always false
test = true; // this branch is never taken
} else {
String messageBody = "sms";
sm.sendTextMessage("5556", null, messageBody, null, null);
}
因此只有“else 分支”被执行。另一个分支是死代码。然后我使用 eclipse 将我的代码导出到一个 apk 中。
在那之后,我用 apktools 打开 apk,我拿起 dex 文件,所以我有以下字节码:
CODE:3EE80 const/4 v2, 0
CODE:3EE82 206F 001C 0087 invoke-super {this, p0}, <void Activity.onCreate(ref) imp. @ _def_Activity_onCreate@VL>
CODE:3EE88 0115 7F03 const/high16 v1, 0x7F030000
CODE:3EE8C 206E 12C9 0017 invoke-virtual {this, v1}, <void MainActivity.setContentView(int) imp. @ _def_MainActivity_setContentView@VI>
CODE:3EE92 0612 const/4 v6, 0
CODE:3EE94 0071 0FD3 0000 invoke-static {}, <ref SmsManager.getDefault() imp. @ _def_SmsManager_getDefault@L>
CODE:3EE9A 000C move-result-object v0
CODE:3EE9C 0638 0003 if-eqz v6, loc_3EEA2
CODE:3EEA0 1612 const/4 v6, 1
CODE:3EEA2
CODE:3EEA2 031A 143A const-string v3, aSmsI # "sms"
CODE:3EEA6 011A 00BE const-string v1, a5556 # "5556"
CODE:3EEAA 2407 move-object v4, v2
CODE:3EEAC 2507 move-object v5, v2
CODE:3EEAE 0674 0FD4 0000 invoke-virtual/range {v0..v5}, <void SmsManager.sendTextMessage(ref, ref, ref, ref, ref) imp. @ _def_SmsManager_sendTextMessage@VLLLLL>
CODE:3EEB4 000E return-void
CODE:3EEB4 Method End
我更改了位于 0x3eea0 处的 if/else 构造中的死代码,使其重叠并在“else 分支”中隐藏了一些代码:
CODE:3EEA0 0218 031A 143A 011A+ const-wide v2:v3, 0xBE011A143A031A
CODE:3EEAA 2407 move-object v4, v2
CODE:3EEAC 2507 move-object v5, v2
CODE:3EEAE 0674 0FD4 0000 invoke-virtual/range {v0..v5}, <void SmsManager.sendTextMessage(ref, ref, ref, ref, ref) imp. @ _def_SmsManager_sendTextMessage@VLLLLL>
CODE:3EEB4 000E return-void
CODE:3EEB4 Method End
然后我更改了 dex 文件的校验和和哈希值。我用 apktools 关闭我的 apk,然后用 jarsigner 给它签名。
我使用 adb 在我的模拟设备上安装 apk。一切顺利。
但是当我尝试启动该应用程序时,它崩溃了并且我的设备上出现以下错误:“不幸的是,我的应用程序已停止”。
logcat 给我这个:
09-06 08:31:13.126: E/AndroidRuntime(874): FATAL EXCEPTION: main
09-06 08:31:13.126: E/AndroidRuntime(874): java.lang.VerifyError: trust/vuln/myApps/MainActivity
09-06 08:31:13.126: E/AndroidRuntime(874): at java.lang.Class.newInstanceImpl(Native Method)
09-06 08:31:13.126: E/AndroidRuntime(874): at java.lang.Class.newInstance(Class.java:1130)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.app.ActivityThread.access$600(ActivityThread.java:141)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.os.Handler.dispatchMessage(Handler.java:99)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.os.Looper.loop(Looper.java:137)
09-06 08:31:13.126: E/AndroidRuntime(874): at android.app.ActivityThread.main(ActivityThread.java:5103)
09-06 08:31:13.126: E/AndroidRuntime(874): at java.lang.reflect.Method.invokeNative(Native Method)
09-06 08:31:13.126: E/AndroidRuntime(874): at java.lang.reflect.Method.invoke(Method.java:525)
09-06 08:31:13.126: E/AndroidRuntime(874): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-06 08:31:13.126: E/AndroidRuntime(874): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-06 08:31:13.126: E/AndroidRuntime(874): at dalvik.system.NativeStart.main(Native Method)
09-06 08:31:13.226: W/ActivityManager(288): Force finishing activity com.vuln.myApps/.MainActivity
java.lang.VerifyError 是因为我的应用程序中的字节码重叠吗?无论如何要在 Android 应用程序中实现重叠的字节码?
最佳答案
Dalvik 验证器不允许您跳转到指令的中间。您的尝试是明确不允许的。
如果您查看问题中显示的异常上方几行的 logcat 输出,您应该会看到一堆“VFY”消息,指示特定的关注点。
关于android - java.lang.verifyError : Does dalvik support overlapping bycodes? 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18658806/
我正在尝试使用公式来映射 ICollection 类型的属性,但是,无论我使用哪种方法来确定映射中的类型,nHibernate 都会引发错误。 No parameterless constructor
我需要在多个类中重用一个组件类型,但该组件类型的映射将根据它所在的根类而有所不同。我们正在使用 ByCode 映射 API 来实现这一点。 看起来应该很简单:只需为每个类显式映射不同的组件即可。 但是
所以最近我一直在尝试简单地更改一个类名,但我就是做不到。这是我的代码注入(inject)器类节点 https://0bin.net/paste/9REMNddwqjm8vRms#hyr4RG3BI36
我有一个员工表: Employee { Name EmployeeId -pk PositionId -fk } positionId映射到位置表: Position {
有什么区别?自 NH 3.2 以来,我是否应该认为 Fluent NH 已过时? 最佳答案 几乎没有什么主要区别 - FNH 已经很成熟并且很流行,但是按代码映射更强大,与 NHibernate 功能
本文整理了Java中pl.edu.icm.model.bwmeta.y.YLanguage.byCode()方法的一些代码示例,展示了YLanguage.byCode()的具体用法。这些代码示例主要来
我相信这个问题是由忽略 FetchKind 属性引起的。 我有一个员工表: Employee { ID Name PositionCode } 和位置表: Position {
我尝试修改我的 apk 中的 dex 文件以混淆我的代码。 我在 eclipse 上编译了以下代码: boolean test = false; SmsManager sm = SmsManager.
我有一个类型为 byte[] 的类,我想使用新的 NHibernate ByCode 将其映射到 SQL Server 中的 varbinary(max) 字段映射。 到目前为止,为了让 NH 创建模
我正在学习 NHibernate,我了解到类映射是使用 XML 完成的。我知道 Fluent NHibernate 是作为 XML 样式映射的强类型替代品出现的。事实上,这里是 fluent-nhib
我是一名优秀的程序员,十分优秀!