멀티메시지가 깨져나와서 어쩔수 없이 찾아도 안나옴 그래서 분석을 시작 햇습니다.
미유 6 쓰는 사람 저 뿐인가요? 찾아도 없네여. 문자 패치 해서 쓰는 사람 없나여 ?
나와 있는건 이전 버전꺼 인데 프래임 워크가 너무 옛날 버전 밖에 없어서 호환이 안되고 그래서 어쩔수 없이 파일 패치를 해야 될거 같네여. 그래서 분석을 시작 햇습니다.
멀티메시지가 깨져서 나오는 사람들 패치 할 파일들입니다.
framework.jar
framework-res.apk
Mms.apk
폰의 시스템 폴더와 프레임워크 폴더 에서 가져오세여.
스크립트와 파일 필요
파일은 직접 수정을 하셔야 될 거에여 스크립트가 데이타 버전이 안맞아서 직접 수정 해야 되는거 같습니다.
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();