【问题标题】:Change a set method in dalvik (smali code)更改 dalvik 中的 set 方法(smali 代码)
【发布时间】:2018-01-06 09:05:36
【问题描述】:

我正在通过传输钱包、价格、id、代码等数据来进行在线 (json) 的 android 逆向工程。

我找到了一个设置和获取 Wallet 值的类,但不知道如何更改它。

我不擅长倒车。我认为在主要活动中,此代码从 json 获取钱包值并将其设置在应用程序中。

Fragment_Main_Page.this.sharedPreference.setWallet(((Ser_FirstPage)paramAnonymousResponse.body()).getWallet());

这部分,我认为是从服务器读取钱包字符串:

paramAnonymousResponse.body()).getWallet());

然后将其发送到 sharedPreference 类以在程序中设置。

在 sharedPreference 类中,setWallet 方法是:

public void setWallet(String paramString)
  {
    this.editor.putString("wallet", paramString);
    this.editor.commit();
  }

如您所见,ParamString 必须是我之前所说的值。

和设置方法smali代码是:

method public setWallet(Ljava/lang/String;)V
    .locals 2
    .param p1, "wallet"    # Ljava/lang/String;

    .prologue
    .line 247
    iget-object v0, p0, Lfenix/team/aln/mahan/component/ClsSharedPreference;->editor:Landroid/content/SharedPreferences$Editor;

    const-string v1, "wallet"

    invoke-interface {v0, v1, p1}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    .line 248
    iget-object v0, p0, Lfenix/team/aln/mahan/component/ClsSharedPreference;->editor:Landroid/content/SharedPreferences$Editor;

    invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z

    .line 249
    return-void
.end method

我想将 smali 代码中的“ParamString”更改为“5000”或“Hello”等静态字符​​串值,而不是 setWallet(String paramString) 接收的输入值。

像这样:

public void setWallet(String paramString)
  {
    String str1="5000"
    this.editor.putString("wallet", str1);
    this.editor.commit();
  }

在 smali 中很难更改。

ps:理解 smali 指令的最佳资源/书籍是什么

【问题讨论】:

标签: android reverse-engineering smali


【解决方案1】:
  1. 最初更改本地人的数量:
    .locals 3

  2. 为新本地设置值:
    const-string v2, "5000"

  3. 在方法中替换本地:

    invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;
    

最终结果:

method public setWallet(Ljava/lang/String;)V
    .locals 3
    .param p1, "wallet"    # Ljava/lang/String;

    .prologue
    .line 247
    iget-object v0, p0, Lfenix/team/aln/mahan/component/ClsSharedPreference;->editor:Landroid/content/SharedPreferences$Editor;

    const-string v1, "wallet"

    const-string v2, "5000"

    invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor;

    .line 248
    iget-object v0, p0, Lfenix/team/aln/mahan/component/ClsSharedPreference;->editor:Landroid/content/SharedPreferences$Editor;

    invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z

    .line 249
    return-void
.end method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多