2013-12-10 80 views
2

我需要在Android APK中進行修改。 這個任務是重新命名動態符號(這是函數名)。如何重命名arm elf .so文件中的動態符號?

例如,從Java_com_example_abc _....到Java_com_yahoo_zzz變化_....

我嘗試使用WinHex中直接搜索和替換文本的話,將APK啓動錯誤。 似乎.hash部分也需要更新,但我不知道如何更新.hash部分。

我的問題是什麼是正確或更好的方式來重命名動態符號?

我被困了3天,請幫助我,非常感謝!

找到一篇可能有關,但他沒有給出替代解決方案。 https://sourceware.org/ml/binutils/2006-03/msg00266.html

+0

唯一的辦法是更新你的.so lib和compule的源碼再次 – pskink

+0

@pskink嗯,我現在失去了。我試圖修改的這個文件是從另一個文件中修改的,這個文件已經從原來的修改過了。所以我很確定它是可行的,但不知道如何。順便說一句,只需要更新函數名稱(符號)。 – user3086444

+0

你怎麼知道.so已被其他人修改? – pskink

回答

0

我起伏一直停留3天,請大家幫幫我,

你所想要實現有效不可能的。

ELF文件具有複雜的內部結構,而您要執行的操作需要分解並重新組裝這些部分。一個類比可能是將英特爾CPU分解爲晶體管並從它們重新組裝AMD CPU。

找到相關

一個訊息可能是相關。報價:

基本上它具有下列功能:

  1. 環比顯.dynsym並重新創建的.dynstr
  2. 從頭
  3. 重新創建.hash表計算新的LMA/VMA ,新的內存佈局(.dynstr大小發生變化!)
  4. 修復.dynamic的內容,根據新的佈局
  5. 修復.rel.dyn
  6. 修復.rel.plt
  7. 修復顯.dynsym再次
  8. 寫出來的新的部分內容

在copy_section:被copyied排除重寫部分。

目前它似乎創建了一個語法上有效的ELF文件,但如 .plt和.got之間的距離發生變化, .plt中的相對地址被破壞。另外,.got必須再次修復。

因此,作者設法將一些看起來像AMD CPU的東西粘合在一起,但不起作用。

當然,您可以再花2周時間瞭解作者的工作內容,然後再花3周時間來修復剩餘的碎片。之後,你可以可能得到的東西有時這樣的工作。

你的時間是可能更好地花在其他地方。

+0

相關文章是試圖重新命名符號長度不同的補丁。如果你不需要改變長度,那麼大部分工作應該是不必要的。 – OrangeDog