달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

멀티메시지가 깨져나와서 어쩔수 없이 찾아도 안나옴 그래서 분석을 시작 햇습니다. 

미유 6 쓰는 사람 저 뿐인가요? 찾아도 없네여. 문자 패치 해서 쓰는 사람 없나여 ? 

나와 있는건 이전 버전꺼 인데 프래임 워크가 너무 옛날 버전 밖에 없어서 호환이 안되고 그래서 어쩔수 없이 파일 패치를 해야 될거 같네여. 그래서 분석을 시작 햇습니다. 

멀티메시지가 깨져서 나오는 사람들 패치 할 파일들입니다. 


framework.jar


Mms.apk


framework-res.zip


framework.jar

framework-res.apk

Mms.apk

폰의 시스템 폴더와 프레임워크 폴더 에서 가져오세여. 

스크립트와 파일 필요 

Data.txt

파일은 직접 수정을 하셔야 될 거에여 스크립트가 데이타 버전이 안맞아서 직접 수정 해야 되는거 같습니다. 

jBART-master 로 일단 디컴파일을 합니다. 


위치를 찾아야 겟죠. smali/com/android/internal/telephony/gsm/SmsMessage.smali

이거네여. 

어라 파일이 존재 하지 않네여 이런 버전 이 업데이트 되면서 파일이 사라진 ㅡ,.ㅡ 

SmsMessage.smali 요거 어디에 잇는 걸까요 ㅡ,.ㅡ


apkTool = APKTool("/system/framework/framework.jar");


apkTool:Extract();


--[START]Patch parseUserData Method

targetFile = FileUtil(apkTool:GetSubFilePath("smali/com/android/internal/telephony/gsm/SmsMessage.smali"));

dataFile = FileUtil(MM:GetModFilePath("Data.txt"));


startPattern = targetFile:Escape(".method private parseUserData(Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;Z)V");

endPattern = targetFile:Escape(".end method");


targetMethod = targetFile:SearchRange(startPattern, endPattern);


startPattern = targetFile:Escape(".restart local") .. ".*" .. targetFile:Escape("#count:I");

endPattern = "goto";


targetArea = targetMethod:SearchRange(startPattern, endPattern);


if not targetArea:DupeCheck("getUserDataKSC5601") then

countRegister = string.match(targetArea.Start, "local (v%d)");

pattern = "iput-object.*" .. targetFile:Escape("messageBody:Ljava/lang/String;");

targetLine = targetArea:SearchLine(pattern);

putRegister = string.match(targetLine.Data, "(v%d),");

data = [[

   invoke-virtual {p1, %s}, Lcom/android/internal/telephony/gsm/SmsMessage$PduParser;->getUserDataKSC5601(I)Ljava/lang/String;

   move-result-object %s

]];

data = string.format(data, countRegister, putRegister);

targetLine.Data = data;

targetArea:ReplaceLine(targetLine, FILEUTIL_APPENDBEFORE);

targetFile:ReplaceRange(targetArea);

targetFile:Save();

end

--[END]Patch parseUserData Method

헉 smali/com/android/internal/telephony/gsm/SmsMessage$PduParser.smali 이것도 없네여. ㅠㅠ

--[START]Adding new function to PduParser

targetFile = FileUtil(apkTool:GetSubFilePath("smali/com/android/internal/telephony/gsm/SmsMessage$PduParser.smali"));


if not targetFile:DupeCheck(targetFile:Escape(".method getUserDataKSC5601")) then

targetLine = targetFile:SearchLine("# virtual methods");

targetLine.Data = dataFile:SearchRange(targetFile:Escape("data newFunction()"), targetFile:Escape("enddata")).Data;

targetFile:ReplaceLine(targetLine, FILEUTIL_APPENDAFTER);

targetFile:Save();

end

--[END]Adding new function to PduParser


이것도 없네여 smali/com/google/android/mms/pdu/PduPersister.smali

프레임워크에 mms 관련 파일들이 하나도 없습니다. 문자메시지 mms.apk 파일로 옴겻을 까요 ?


--[START]Editing PduPersister.smali to MMS Support

targetFile = FileUtil(apkTool:GetSubFilePath("smali/com/google/android/mms/pdu/PduPersister.smali"));


startPattern = targetFile:Escape(".method private persistData(Lcom/google/android/mms/pdu/PduPart;Landroid/net/Uri;Ljava/lang/String;)V");

endPattern = targetFile:Escape(".end method");


targetFunction = targetFile:SearchRange(startPattern, endPattern);


targetLine = targetFunction:SearchLine(targetFile:Escape("Lcom/google/android/mms/pdu/EncodedStringValue;-><init>([B)V"));


registerA, registerB = string.match(targetLine.Data, "(v%d), (v%d)");


newData = [[

    invoke-virtual {p1}, Lcom/google/android/mms/pdu/PduPart;->getCharset()I


    move-result v10


    invoke-direct {%s, v10, %s}, Lcom/google/android/mms/pdu/EncodedStringValue;-><init>(I[B)V

]];


newData = string.format(newData, registerA, registerB);


targetLine.Data = newData;


targetFunction:ReplaceLine(targetLine);


targetFile:ReplaceRange(targetFunction);


targetFile:Save();

--[END]Editing PduPersister.smali to MMS Support


마감 때문에 바쁜데 원가 돌리기도 바쁜데 이것 때문에 머리에서 떠나질 않아서 코드 잡고 있네여. 버전이 틀려서 파일이 존재 하지 않다니 이런 경우가 ㅠㅠ 

--[START]Adding euc-kr charset to CharacterSets

targetFile = FileUtil(apkTool:GetSubFilePath("smali/com/google/android/mms/pdu/CharacterSets.smali"));


startPattern = targetFile:Escape(".method static constructor <clinit>()V");

endPattern = targetFile:Escape(".end method");


targetFunction = targetFile:SearchRange(startPattern, endPattern);


targetFunction.Data = dataFile:SearchRange(targetFile:Escape(".method static constructor <clinit>()V"), targetFile:Escape(".end method")).Data;


targetFile:ReplaceRange(targetFunction);


targetFile:Save();

--[END]Adding euc-kr charset to CharacterSets


apkTool:Build();

apkTool:Sign();


요건 존재 하는 군요 smali/com/android/mms/ui/SimplePduPart.smali 


apkTool = APKTool("/system/app/Mms.apk");

apkTool:Extract();

--[START]Forcing UTF-8 encoding to Mms.apk

targetFile = FileUtil(apkTool:GetSubFilePath("smali/com/android/mms/ui/SimplePduPart.smali"));


if not targetFile:DupeCheck("utf-8") then

startPattern = targetFile:Escape(".method private extractTextFromData()Ljava/lang/String;");

endPattern = targetFile:Escape(".end method");

targetFunction = targetFile:SearchRange(startPattern, endPattern);

startPattern = targetFile:Escape("Lcom/google/android/mms/pdu/CharacterSets;->getMimeName(I)Ljava/lang/String;");

endPattern = targetFile:Escape("move-result-object");

targetArea = targetFunction:SearchRange(startPattern, endPattern);

register = string.match(targetArea.End, "(v%d)");

targetArea.End = string.format('const-string %s, "utf-8"', register);

targetFunction:ReplaceRange(targetArea);

targetFile:ReplaceRange(targetFunction);

targetFile:Save();

end

--[END]Forcing UTF-8 encoding to Mms.apk

apkTool:Build();

apkTool:CopySign();

Posted by decompiler
|