Èç¹ûÄúÓÐÄÍÐÄ¿´ÍêÕâÆªÎÄÕ£¬Äú½«¶®µÃÈçºÎ×ÅÊÖ½øÐÐappµÄ·ÖÎö¡¢×·×Ù¡¢×¢ÈëµÈʵÓÃµÄÆÆ½â¼¼Êõ£¬ÁíÍ⣬ͨ¹ý¡°ÈëÇÖ¡±£¬½«°ïÖúÄúÀí½âÈçºÎ¹æ±Ü³£¼ûµÄ°²È«Â©¶´£¬ÎÄÕ´ó¸Ù£º
¼òµ¥½éÉÜios¶þ½øÖÆÎļþ½á¹¹ÓëÈëÇÖµÄÔÀí
½éÉÜÈëÇÖ³£ÓõŤ¾ßºÍ·½·¨£¬°üÀ¨pc¶ËºÍÊÖ»ú¶Ë
½²½âºÚ¿Í¼¼ÊõÖеľ²Ì¬·ÖÎöºÍ¶¯Ì¬·ÖÎö·¨
ͨ¹ýÒ»¸ö¼òµ¥µÄʵÀý£¬À´½éÉÜÈçºÎ×ÛºÏÔËÓÃÔÒ¿Ç¡¢Ñ°ÕÒ×¢Èëµã¡¢lldbÔ¶³Ìµ÷ÊÔ¡¢×·×Ù¡¢·´»ã±à¼¼ÊõÀ´½øÐкڿÍʵս
½²½âÔ½ÓüÆÆ½â²¹¶¡ºÍ²»ÐèÔ½ÓüµÄÆÆ½â²¹¶¡ÖÆ×÷·½·¨ºÍ²î±ð
ºÚ¿ÍµÄËØÑø
ÃôÈñµÄÐá¾õ
ÓÐʱºòͨ¹ýÒ»¸öº¯ÊýÃû£¬Ò»¸öÀàÃû£¬¾ÍÄÜ´óÖµÄÅжϳöËüµÄ×÷Óã¬Õâ¾ÍÊÇÐá¾õ£»¹¦Á¦ÒÑÕ黯¾³Ê±£¬ÉõÖÁ¿ÉÒÔʹÓõÚÁù¸ÐÅжϳöһЩעÈëµã
Ãæ¶Ôʧ°ÜµÄÓÂÆø
ÆÆ½âÓÐʱºòºÜºÄʱ£¬ºÍ³ÌÐò¿ª·¢ÕýºÃÏà·´£¬ËüºÄʱ²»ÊǺÄÔÚд´úÂëÉÏ£¬¶øÊǺÄÔÚѰÕÒ×¢ÈëµãºÍÄæÏò¹¤³ÌÉÏ£¬ÓпÉÄÜÄ㻨ÁË3Ììʱ¼äÈ¥ÕÒ³ÌÐòµÄÆÆÕÀ£¬µ«ÊÇ×îÖÕµÄÆÆ½â´úÂë¿ÉÄܾÍ2ÐУ¬²»µ½Ò»·ÖÖӾ͸㶨ÁË£»µ«ÊÇÄãÒ²ÐèÒª×öºÃÃæ¶Ôʧ°ÜµÄ×¼±¸£¬Èç¹û·ѡ´íÁË£¬ÓпÉÄÜÄãÕâ3ÌìÍêÈ«ÊÇÔÚÀË·ÑÄÔϸ°û
ºé»ÄÖ®Á¦
ºé»ÄÖ®Á¦£¼´ÈëÇÖ¹ý³ÌÖÐÐèÒª½èÖúµÄ¸÷ÖÖ¹¤¾ß£¬¹¤ÓûÉÆÆäÊ£¬±ØÏÈÀûÆäÆ÷£¬¹¤¾ß¶¼ÊÇǰÈËÖǻ۵Ľᾧ£¬ÄÜÓù¤¾ß½â¾öµÄ£¬¾ø²»ÒªÊÖ¶¯È¥¸ã
iOSºÚ¿Í¹Ø¼ü×Ö
iOSµÄÈëÇÖÀë²»¿ªÔ½Óü¿ª·¢£¬Ò»ÇÐµÄÆÆ½â¡¢ÈëÇÖ¶¼Êǽ¨Á¢ÔÚÔ½ÓüµÄ»ù´¡Éϵģ¬Èç¹ûûÓÐÄõ½ÏµÍ³¼¶È¨ÏÞ£¬Ò»ÇеÄÏë·¨¶¼ÊÇ¿Õ̸ÁË£¬µ±È»£¬ÊÐÃæÉÏ´æÔÚÃâÔ½ÓüµÄÆÆ½â²¹¶¡£¬µ«ÊÇËüµÄ¿ª·¢¹ý³Ì£¬Ò²ÊÇ»ùÓÚÔ½Óü»·¾³µÄ
tweak
ÔÚiOSµÄºÚ¿Í½ç£¬Òª×öÆÆ½â»òÔ½Óü¿ª·¢£¬¾Í±ØÐëÁ˽âtweak£¬ËüÊǸ÷ÖÖÆÆ½â²¹¶¡µÄͳ³Æ£¬ÔÚgoogleÉÏ£¬Èç¹ûÄãÏëËÑË÷һЩԽÓü¿ª·¢×ÊÁÏ»òÕß¿ªÔ´µÄÆÆ½â²¹¶¡´úÂ룬ËüÊÇ×îºÃµÄ¹Ø¼ü×Ö¡£
iOSµÄtweak´óÖ·ÖΪÁ½ÖÖ£º
µÚÒ»ÖÖÊÇÔÚcydiaÉÏ·¢²¼µÄ£¬ÐèÒªÔ½Óü²ÅÄܰ²×°£¬´ó²¿·ÖÊÇdeb¸ñʽµÄ°²×°°ü£¬iOSÔÚÔ½Óüºó£¬»áĬÈϰ²×°Ò»¸öÃû½ÐmobilesubstrateµÄ¶¯Ì¬¿â£¬ËüµÄ×÷ÓÃÊÇÌṩһ¸öϵͳ¼¶µÄÈëÇֹܵÀ£¬ËùÓеÄtweak¶¼¿ÉÒÔÒÀÀµËüÀ´½øÐпª·¢£¬Ä¿Ç°Ö÷Á÷µÄ¿ª·¢¹¤¾ßÓÐtheosºÍiOSOpenDev£¬Ç°ÕßÊDzÉÓÃmakefileµÄÒ»¸ö±àÒë¿ò¼Ü£¬ºóÕßÌṩÁËÒ»Ì×xcodeÏîĿģ°æ£¬¿ÉÒÔÖ±½ÓʹÓÃxcode¿ª·¢¿Éµ÷ÊÔ£¬µ«ÊÇÕâ¸öÏîÄ¿ÒѾֹͣ¸üÐÂÁË£¬¶Ô¸ß°æ±¾µÄxcodeÖ§³Ö²»ºÃ£¬´ó¼Ò×ÃÇéÑ¡Ôñ£¨±¾ÎÄÖеÄÀý×ÓÈ«²¿²ÉÓÃtheos£©
µÚ¶þÖÖÊÇÖ±½Ó´ò°ü³Éipa°²×°°ü£¬²¢Ê¹ÓÃ×Ô¼ºµÄ¿ª·¢Ö¤Êé»òÕ߯óÒµÖ¤ÊéÇ©Ãû£¬²»ÐèÔ½ÓüÒ²¿ÉÒÔ°²×°£¬¿ÉÖ±½Ó·Åµ½×Ô¼ºµÄÍøÕ¾ÉÏ£¬¿ÉʵÏÖÔÚÏß°²×°£»¶ÔÓÚûÓÐÔ½ÓüµÄÊÖ»ú£¬ÓÉÓÚȨÏÞµÄÏÞÖÆ£¬ÎÒÃÇÊÇûÓа취дϵͳ¼¶µÄtweakµÄ£¬ÀýÈçspringboardµÄ²¹¶¡ÊÇû·¨ÔËÐеģ¬ÕâÖÖtweak´ó¶àÊÇÕë¶Ôij¸öapp£¬°ÑÄ¿±êapp½øÐÐÐÞ¸Ä×¢Èë´¦Àí£¬ÔÙÖØÐÂÇ©ÃûºÍ·¢²¼£¬ÓеãÀàËÆÓÚwindowsÈí¼þµÄxxxÆÆ½â°æ¡¢xxxÃâ×¢²á°æ
ûÓÐÔ½ÓüµÄ»úÆ÷ÓÉÓÚϵͳÖÐûÓÐmobilesubstrateÕâ¸ö¿â£¬ÎÒÃÇÓжþ¸öÑ¡Ôñ£¬µÚÒ»¸öÊÇÖ±½Ó°ÑÕâ¸ö¿â´ò°ü½øipaµ±ÖУ¬Ê¹ÓÃËüµÄapiʵÏÖ×¢È룬µÚ¶þ¸öÊÇÖ±½ÓÐ޸Ļã±à´úÂ룻µÚÒ»¸öÊÊÓÃÓÚ½ÏΪ¸´ÔÓµÄÆÆ½âÐÐΪ£¬¶øÇÒÔ½Óütweak´úÂë¿ÉÒÔ¸´Ó㬵ڶþÖÖÊÊÓÃÓÚÆÆ½âһЩif¡else¡Ö®ÀàµÄÌõ¼þÓï¾ä
Mobilesubstrate
ÏÂÃæµÄͼչʾµÄ¾ÍÊÇoc½ìÖøÃûµÄmethod swizzling¼¼Êõ£¬Ëû¾ÍÊÇiOSµÄ×¢ÈëÔÀí£¬ÀàËÆÓÚwindowsµÄ¹³×Ó£¬ËùÒÔÎÒÃÇ×¢ÈëÒ²³ÆÎªhook

MobilesubstrateΪÁË·½±ãtweak¿ª·¢£¬ÌṩÁËÈý¸öÖØÒªµÄÄ£¿é£º
MobileHooker ¾ÍÊÇÓÃÀ´×öÉÏÃæËù˵µÄÕâ¼þʵģ¬Ëü¶¨ÒåһϵÁеĺêºÍº¯Êý£¬µ×²ãµ÷ÓÃobjc£runtimeºÍfishhookÀ´Ì滻ϵͳ»òÕßÄ¿±êÓ¦Óõĺ¯Êý
MobileLoader ÓÃÀ´ÔÚÄ¿±ê³ÌÐòÆô¶¯Ê±¸ù¾Ý¹æÔò°ÑÖ¸¶¨Ä¿Â¼µÄµÚÈý·½µÄ¶¯Ì¬¿â¼ÓÔØ½øÈ¥£¬µÚÈý·½µÄ¶¯Ì¬¿âÒ²¾ÍÊÇÎÒÃÇдµÄÆÆ½â³ÌÐò£¬ËûµÄÔÀíÏÂÃæ»á¼òµ¥½²½âÒ»ÏÂ
Safe mode ÀàËÆÓÚwindowsµÄ°²È«Ä£Ê½£¬±ÈÈçÎÒÃÇдµÄһЩϵͳ¼¶µÄhook´úÂë·¢Éúcrashʱ£¬mobilesubstrate»á×Ô¶¯½øÈ밲ȫģʽ£¬°²È«Ä£Ê½Ï£¬»á½ûÓÃËùÓеĵÚÈý·½¶¯Ì¬¿â
app×¢ÈëÔÀí
ÉÏÃæ½²µ½ÁËmobileloader£¬ËûÊÇÔõô×öµ½°ÑµÚÈý·½µÄlib×¢Èë½øÄ¿±ê³ÌÐòµÄÄØ£¿Õâ¸öÎÒÃÇÒª´Ó¶þ½øÖÆÎļþµÄ½á¹¹ËµÆð£¬´ÓÏÂÃæµÄͼÀ´¿´£¬Mach-OÎļþµÄÊý¾ÝÖ÷Ìå¿É·ÖΪÈý´ó²¿·Ö£¬·Ö±ðÊÇÍ·²¿£¨Header£©¡¢¼ÓÔØÃüÁLoad
commands£©¡¢ºÍ×îÖÕµÄÊý¾Ý£¨Data£©¡£mobileloader»áÔÚÄ¿±ê³ÌÐòÆô¶¯Ê±£¬»á¸ù¾ÝÖ¸¶¨µÄ¹æÔò¼ì²éÖ¸¶¨Ä¿Â¼ÊÇ·ñ´æÔÚµÚÈý·½¿â£¬Èç¹ûÓУ¬Ôò»áͨ¹ýÐ޸Ķþ½øÖƵÄloadCommands£¬À´°Ñ×Ô¼º×¢Èë½øËùÓеÄappµ±ÖУ¬È»ºó¼ÓÔØµÚÈý·½¿â¡£

ΪÁËÈôó¼Ò¿´µÄ¸üÇå³þ£¬ÏÂÃæÎÒÓÃmachoviewÀ´´ò¿ªÒ»¸öÕæÊµµÄ¶þ½øÖÆÎļþ¸ø´ó¼Ò¿´¿´£¬¿ÉÒÔ¿´³ö£¬¶þ½øÖƵ±ÖÐËùÓÐÒýÓõ½µÄ¶¯Ì¬¿â¶¼·ÅÔÚLoad
commands¶Îµ±ÖУ¬ËùÒÔ£¬Í¨¹ý¸øÕâ¸ö¶ÎÔö¼Ó¼Ç¼£¬¾Í¿ÉÒÔ×¢ÈëÎÒÃÇ×Ô¼ºÐ´µÄ¶¯Ì¬¿âÁË

ÄÇôÎÊÌâÀ´ÁË£¬ÔÚÕâÀï²åÈëÎÒÃÇ×Ô¼ºµÄ¶¯Ì¬¿âÓÐʲôÓã¿ÎÒÃÇ×Ô¼ºÐ´µÄ´úÂëûÓÐÖ´ÐеÄÈë¿Ú£¬ÎÒÃÇÒ»Ñùû·¢¸É»µÊ£¬àÅ£¬¹§Ï²ÄãÎʵ½µã×ÓÉÏÁË£¬ÎÒÃÇ»¹ÐèÒªÒ»¸ö"main"º¯ÊýÀ´Ö´ÐÐÎÒÃÇ×Ô¼ºµÄ´úÂ룬Õâ¸ö"main"º¯ÊýÔÚocÀïÃæ³ÆÎª¹¹Ô캯Êý£¬Ö»ÒªÔÚº¯ÊýǰÉùÃ÷
¡°attribute((constructor)) static¡± ¼´¿É£¬ÓÐÁËËüÎÒÃǾͿÉÒÔ·¢»ÓÏëÏóÁ¦£¬½øÐÐ͵Ìì»»Èոɵ㻵ÊÂÁË£º
#import
<CaptainHook/CaptainHook.h>
CHDeclareClass(AnAppClass);
CHMethod(1, void, AnAppClass,
say, id, arg1)
{
NSString* tmp=@"Hello, iOS!";
CHSuper(1, AnAppClass, say, tmp);
}
__attribute__((constructor))
static void entry()
{
NSLog(@"Hello, Ice And Fire!");
CHLoadLateClass(AnAppClass);
CHClassHook(1, AnAppClass,say);
}
|
µ½ÕâÀïΪֹ£¬ÎÒÃÇÒѾ֪µÀÁËÔõôÔÚÄ¿±ê³ÌÐò×¢Èë×Ô¼ºµÄ´úÂ룬ÄÇôÎÒÃÇÔõô֪µÀÐèÒªhookÄÄЩ·½·¨£¿ÔõôÕÒµ½¹Ø¼üµã½øÐÐʵ¼ÊµÄÆÆ½âÄØ£¿ÏÂÃæ½²Ò»Ï³£¼ûµÄappÈëÇÖ·ÖÎö·½·¨
###iOSÄæÏò·ÖÎö·½·¨
ÄæÏò·ÖÎö×î³£ÓõÄÓÐÈýÖÖ·½·¨£º
ÍøÂç·ÖÎö
ͨ¹ý·ÖÎöºÍ´Û¸Ä½Ó¿ÚÊý¾Ý£¬¿ÉÒÔÓÐЧµÄÆÆ½âͨ¹ý½Ó¿ÚÊý¾ÝÀ´¿ØÖƿͻ§¶ËÐÐΪµÄapp£¬³£ÓõÄ×¥°ü¹¤¾ßÓÐTcpdump,
WireShark, CharlesµÈ£¬windowsƽ̨ÓÐfidller
¾²Ì¬·ÖÎö
ͨ¹ýÔÒ¿Ç¡¢·´»ã±à¡¢classdumpÍ·ÎļþµÈ¼¼ÊõÀ´·ÖÎöappÐÐΪ£¬Í¨¹ýÕâÖÖ·½Ê½¿ÉÒÔÓÐЧµÄ·ÖÎö³öappʵÓõÄһЩµÚÈý·½¿â£¬ÉõÖÁ·ÖÎö³öappµÄ¼Ü¹¹µÈÄÚÈÝ£¬³£ÓõŤ¾ßÓÐdumpdecrypted£¨ÔÒ¿Ç£©¡¢hopper
disassembler£¨·´»ã±à£©¡¢class_dump£¨µ¼Í·Îļþ£©
¶¯Ì¬·ÖÎö
Óо²¾ÍÓж¯£¬ÍòÎï¶¼ÊÇÏàÉúÏà¿ËµÄ£¬¶¯Ì¬·ÖÎöÖ¸µÄÊÇͨ¹ý·ÖÎöappµÄÔËÐÐʱÊý¾Ý£¬À´¶¨Î»×¢Èëµã»òÕß»ñÈ¡¹Ø¼üÊý¾Ý£¬³£ÓõŤ¾ßÓÐcycript£¨ÔËÐÐʱ¿ØÖÆÌ¨£©¡¢
lldb+debugserver£¨Ô¶³Ì¶Ïµãµ÷ÊÔ£©¡¢logify£¨×·×Ù£©
demo:΢ÐÅÇÀºì°ü²å¼þ
ÉÏÃæ½²Á˺ܶàÔÀíÐԵĶ«Î÷£¬ÏàÐÅ´ó¼ÒÒѾ¿´µÄ²»ÄÍ·³ÁË£¬ÏÂÃæÎÒÃÇÒ»Æð¶¯µãÕæ¸ñµÄ£¬ÎÒÃÇ´ÓÍ·¿ªÊ¼£¬Ò»²½Ò»²½µÄ×öÒ»¸ö΢ÐŵÄ×Ô¶¯ÇÀºì°ü²å¼þ£¬µ±È»£¬ÍøÉÏ¿ÉÄÜÒѾÓÐÏà¹ØµÄ¿ªÔ´´úÂëÁË£¬µ«ÊÇÎÒÕâÀïÒª½²µÄÊÇ£¬ÕâЩ´úÂëÊÇÔõôµÃ³öÀ´µÄ£¬ÎÒÃ´ÖØµã½²Ò»½²·ÖÎö¹ý³Ì
¹¤ÓûÉÆÆäÊ£¬±ØÏÈÀûÆäÆ÷
һ̨ԽÓüµÄÊÖ»ú£¬²¢×°ÓÐÒÔÏÂÈí¼þ
cycript
dumpdecrypted
debug server
openssh
һ̨ƻ¹ûµçÄÔ£¬²¢×°ÓÐÒÔÏÂÈí¼þ
class_dump
Theos
Hopper Disassembler v3
xcode
insert_dylib
ppÖúÊÖ
###ѰÕÒ×¢Èëµã
ÔÒ¿Ç
Ê×ÏÈÎÒÃÇÒª×öµÄ¾ÍÊǰÑ΢ÐŵĿÇÔÒµô£¬ÔÒ¿ÇÆäʵÊÇΪÁ˰ÑËüµÄÍ·Îļþclassdump³öÀ´£¬ÒòΪ´ÓappstoreÏÂÔØµÄapp¶þ½øÖƶ¼ÊǾ¹ý¼ÓÃܵģ¬Ö±½Ó½øÐÐclassdump²Ù×÷ÊÇɶҲ¿´²»³öÀ´µÄ
ÓÃppÖúÊÖ°Ñdumpdecrypted.dylibÎļþcopyµ½Î¢ÐŵÄdocumentsĿ¼
sshµ½ÊÖ»úµÄÖÕ¶Ë£¬cdµ½documentsĿ¼ÖУ¬Ö´ÐÐÏÂÃæµÄÃüÁî½øÐÐÔҿDzÙ×÷
xxx$
cp /usr/lib/dumpdecrypted.dylib /path/to/app/document
xxx$ DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib
/path/to/WeChat
|
×îºóÔÒ¿ÇÍê³Éºó»áÔÚdocumentsĿ¼Éú³ÉÔÒÁ˿ǺóµÄ¶þ½øÖÆÎļþ£¬ÓÃppÖúÊÖcopy³öÀ´²¢class-dumpËûµÄÍ·Îļþ±¸ÓÃ
Ö´ÐÐÍêÕ⼸ÐÐÃüÁîºó£¬»áÔÚ΢ÐŵÄdocumentsĿ¼Éú³ÉÒ»¸öWeChat.decryptedÎļþ£¬Õâ¾ÍÊÇÔҿǺóµÄ¶þ½øÖÆÎļþ£»µ±È»ÁË£¬ÕâÒ»²½²»ÊDZØÐëµÄ£¬ÎÒÃÇ¿ÉÒÔÖ±½Ó´Ó91»òÕßppÖúÊÖÏÂÔØÒ»¸öÒѾÔÒ¹ý¿ÇµÄ°æ±¾
¶¯Ì¬·ÖÎö£cycript
ÒªÏëʵÏÖ×Ô¶¯ÇÀºì°ü£¬ÎÒÃDZØÐëÕÒµ½ÊÕµ½ºì°üÏûÏ¢µÄhandler·½·¨£¬ÔõôÈëÊÖÄØ£¿ÎÒÃÇÏÈ´Ó½çÃæ³ö·¢£¬½øÈë΢ÐŵÄÏûÏ¢Ê×·¢´°¿Ú:

ssh½øÊÖ»úµÄÖÕ¶Ë£¬ÊäÈëpsÃüÁ²éÕÒµ½Î¢ÐŵĽø³Ìid
¼ÀÆðÉñÆ÷cycript£¬¸ù¾ÝÉÏÒ»²½ÕÒµ½µÄpid×¢È뵽΢ÐŵĽø³Ì
ÔÚcycriptµÄÖÕ¶ËÊäÈëÕâÒ»´®·½·¨£¬×÷ÓþÍÊÇ´òÓ¡³öµ±Ç°½çÃæµÄview²ã¼¶£¬£¨cycript»¹ÓкܶàÃîÓ㬴ó¼Ò¿ÉÒÔÉϹÙÍø¿´Îĵµ£¬ÕâÀï²»Ïêϸ½éÉÜ£©
UIApp.keyWindow.recursiveDescription().toString() |
×îÖÕµÄÊä³öÈçÏ£¬ÄÚÈÝÌ«¶à£¬´ó¼Ò¿Ï¶¨¿´²»Çå³þ£¬²»¹ýû¹ØÏµ£¬Õâ¸ö²»ÊÇÖØµã£¬ÕâÀïÖ»ÊÇչʾһÏ´òÓ¡µÄ½á¹ûÐÎʽ£º

ÎÒÃÇ¿ÉÒÔËæ»úµÄѡȡһ¸ö½Úµã²»ÒªÌ«¿¿Ê÷Ò¶£¬Ò²²»ÒªÌ«¿¿Ê÷¸ù£¬ÀýÈçÎÒÑ¡µÄÊDZêºìµÄ²¿·Ö£¬°ÑÕâ¸ö½ÚµãµÄÄÚ´æµØÖ·copy³öÀ´£¬Õâ¸öÄÚ´æµØÖ·£¬¾Í´ú±íÁËÕâ¸ö½ÚµãµÄview¶ÔÏó£¬ios¿ª·¢µÄÀÏÓÍÌõÃǶ¼ÖªµÀ£¬Í¨¹ýviewµÄnextResponder·½·¨£¬¿ÉÒÔÕÒ³öËüËùÊôµÄÊÓͼ¿ØÖÆÆ÷ViewController£¬ËùÒÔÎÒôÔÚcycriptµÄ¿ØÖÆÌ¨ÖгÖÐøÊäÈëÈçϵÄÃüÁ

¿´µ½Ã»ÓУ¬Í¨¹ýËĸönextResponder·½·¨µ÷Óã¬ÎÒôÕÒµ½Á˵±Ç°ÁÄÌì´°¿ÚµÄViewControllerÀàÃû£¬Ëû¾ÍÊÇBaseMsgContentViewController£¬ÏÖÔÚÎÒÃÇËõСÁËÄ¿±ê·¶Î§£¬ÏÂÃæÎÒÃÇ»¹ÐèÒª¼ÌÐøËõС·¶Î§£¬ÒªÕÒµ½¾ßÌåµÄÏûÏ¢´¦Àíº¯Êý²ÅÐС£
¶¯Ì¬·ÖÎö£Logify
Òª¼ÌÐøËõС·¶Î§£¬¾ÍµÃ¼ÀÆðÉñÆ÷LogifyÁË£¬ËüÊÇtheosµÄÒ»¸öÄ£¿é£¬×÷ÓþÍÊǸù¾ÝÍ·Îļþ×Ô¶¯Éú³Étweak£¬Éú³ÉµÄtweak»áÔÚÍ·ÎļþµÄËùÓз½·¨ÖÐ×¢ÈëNSLogÀ´´òÓ¡·½·¨µÄÈë²ÎºÍ³ö²Î£¬·Ç³£ÊʺÏ×·×Ù·½·¨µÄµ÷ÓúÍÊý¾Ý´«µÝ
ÏÖÔÚÎÒÃǸù¾Ý´ËǰÔҿǺóclass_dump³öÀ´µÄÍ·Îļþ£¬ÕÒµ½BaseMsgContentViewControllerÔÚpcÖÕ¶ËÖ´ÐÐÈçÏÂÃüÁ
logify.pl /path/to/BaseMsgContentViewController.h > /out/to/Tweak.xm |
Êä³öµÄtweakÎļþ´ó¸ÅÊÇÕâ¸öÑù×ӵģº

ÕâÀï´ø°Ù·ÖºÅµÄ¹Ø¼ü×Ö£¬ÀýÈç %hook¡¢%log¡¢%orig ¶¼ÊÇmobilesubstrateµÄMobileHookerÄ£¿éÌṩµÄºê£¬ÆäʵҲ¾ÍÊǰÑmethod
swizzlingÏà¹ØµÄ·½·¨·â×°³ÉÁ˸÷ÖÖºê±ê¼Ç£¬Ê¹ÓÃÆðÀ´¸ü¼òµ¥£¬´ó¼ÒÏëÒª¸üÉîÈëÁ˽â¸÷ÖÖ±ê¼Ç£¬¿ÉÒÔgoogleÒ»ÏÂlogosÓïÑÔ
theos´´½¨tweak
ÉÏÃæÎÒÃÇÓÃlogifyÉú³ÉÁËÒ»¸ötweak´úÂ룬ÎÒÃÇÒª°ÑËü°²×°µ½ÊÖ»úÉÏ£¬Ê×ÏÈÐèҪʹÓÃtheos½øÐбàÒ룬°²×°ÁËtheosÖ®ºó£¬ÔÚpcÖÕ¶ËÊäÈënic.pl£º

Ê×ÏÈÑ¡ÔñÏîĿģ°æµ±È»ÊÇtweakÀ²£¬È»ºóÊÇÏîÄ¿Ãû³Æ¡¢×÷Õߣ¬ºóÃæÁ½¸öÑ¡ÏîҪעÒ⣺
Ê×ÏÈÊÇbundle filter£¬Õâ¸öÐèÒªÌîÄãÐèҪעÈëµÄÄ¿±êappµÄbundle id£¬MobileLoaderÄ£¿é»á¸ù¾ÝËüÀ´Ñ°ÕÒÄãµÄtweakµÄ×¢ÈëÄ¿±ê
×îºóÊÇlist id applications to terminate upon installation£¬ÕâÀïÖ¸¶¨µ±tweak°²×°³É¹¦Ö®ºó£¬ÐèÒªkillµÄ½ø³Ì£¬ÎÒÃÇÒªhook΢ÐÅ£¬ÕâÀï¾ÍÌî΢ÐŵĶþ½øÖÆÎļþÃû¾Í¿ÉÒÔÁË£¬ÎªÊ²Ã´Òªkill£¿
ÒòΪÎÒôµÄ²å¼þÊÇÐèÒªÔÚappÆô¶¯Ê±¼ÓÔØ½øÈ¥µÄ£¬Èç¹û²»ÖØÆôapp£¬²å¼þÊDz»»áÉúЧµÄ
×îºóÒ»Çж¼Íê³Éºó£¬ÔÚµ±Ç°Ä¿Â¼»áÉú³ÉÏÂÁÐÎļþ£º

°ÑÉÏÃælogifyÉú³ÉµÄtweakÎļþ¸²¸Çµ½µ±Ç°Ä¿Â¼£¬²¢ÓÃÎı¾±à¼Æ÷´ò¿ªmakefileÎļþ£¬ÔÚÎļþµÄ¿ªÍ·Ôö¼ÓÄãµÄiosÉ豸µÄipµØÖ·ºÍssh¶Ë¿Ú£º

×îºóÔÚpcÖն˽øÈëÏîĿĿ¼£¬ÊäÈë make package install
ÃüÁ

ÆÚ¼ä»áÈÃÄãÊäÈëÉ豸µÄsshÃÜÂ룬ԽÓü»úÆ÷µÄĬÈÏsshÃÜÂëÊÇalpine£¬makeÃüÁî»áÉú³Édeb°²×°°ü£¬·ÅÔÚdebsĿ¼£¬ÎÒÃÇÈç¹ûÏë¶ÔÍâ·¢²¼×Ô¼ºµÄ²å¼þ£¬¿ÉÒÔ°ÑÉú³ÉµÄ°²×°°üÉÏ´«µ½cydia¼´¿É
°²×°³É¹¦ºóÔٴνøÈë΢ÐŵÄÁÄÌì½çÃæ£¬²¢Ê¹ÓÃÁíÍâÒ»¸ö΢ÐÅÔÚȺÀï·¢¸öÆÕͨÏûÏ¢£¬Á¬½Óxcode´ò¿ªÔ½Óü»úÆ÷¿ØÖÆÌ¨£¬²é¿´Êä³ö£¬»á·¢ÏÖÓÐÀàËÆÏÂÃæµÄÊä³ö£º
Jun 7 09:56:13 Administratorde-iPhone WeChat[85972] <Notice>:
[1;36m[WxMsgPreview] [m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[<BaseMsgContentViewController:
0x15e0c9a00> addMessageNode:{m_uiMesLocalID=2, m_ui64MesSvrID=0, m_nsFromUsr=ccg*675~9,
m_nsToUsr=1037957572@chatroom, m_uiStatus=1, type=1, msgSource="(null)"} layout:1 addMoreMsg:0] |
¿´³öÀ´Á˰ɣ¬ÏûÏ¢´¦Àíº¯ÊýÊÇBaseMsgContentViewControllerµÄ**addMessageNode:layout:addMoreMsg:**·½·¨£¬´ó¼Ò¿ÉÒÔ¿´³ö£¬·½·¨µÄ²ÎÊýÄÚÈÝÒ²´òÓ¡³öÀ´ÁË
¶¯Ì¬·ÖÎö£lldb
µ½Ä¿Ç°ÎªÖ¹£¬ÎÒôÒѾ°Ñ·¶Î§ËõСµ½Á˾ßÌåµÄº¯Êý£¬¿´ÆðÀ´×¢ÈëµãÒѾÕÒµ½ÁË£¬µ«ÊÇÇë´ó¼Ò˼¿¼Ò»Ï£¬Èç¹ûÎÒÃÇÔÚÕâ¸öº¯ÊýÖÐ×¢ÈëÇÀºì°üÂß¼£¬ÄÇÎÒÃǵÄtweak»á²»»áÓÐʲôÖÂÃüµÄȱÏÝ£¿
Êǵģ¬ÒòΪBaseMsgContentViewControllerÕâ¸öÀàÊÇ΢ÐÅȺÁÄÌì´°¿Ú¶ÔÓ¦µÄcontroller£¬ÎÒô±ØÐë½øÈ뵽ȺµÄÁÄÌì½çÃæ£¬Õâ¸öÀà²Å»á´´½¨£¬Èç¹û²»½øÈëÁÄÌì´°¿Ú£¬ÎÒÃǵIJå¼þ¾Í²»ÉúЧÁË£¬¶øÇÒ£¬¼´Ê¹½øÈëÁÄÌì´°¿Ú£¬Ò²Ö»ÊÇÄÜ×Ô¶¯Ç¹µ±Ç°ÈºµÄºì°ü¶øÒÑ£¬ÆäËûȺ¾ÍÎÞÄÜΪÁ¦ÁË£¬ÊDz»ÊÇÓеãlow£¿
ËùÒÔΪÁËʹÎÒÃǵIJå¼þÏÔµÃÉÏÁ÷һЩ£¬ÎÒô»¹Òª¼ÌÐø×·¸ùËÝÔ´£¬Ñ°ÕÒÏûÏ¢µÄÔ´Í·£¬ÕâÀï¾ÍÓõ½ÁËlldbÔ¶³Ìµ÷ÊÔ£¬Ê¹ÓÃlldb´ò¶ÏµãµÄ·½Ê½£¬Í¨¹ýµ÷ÓÃÕ»£¬ÎÒÃÇ¿ÉÒԾͿÉÒÔ¿´µ½µ±ÏûÏ¢À´µ½Ê±£¬·½·¨µÄµ÷ÓÃ˳Ðò£¬ÕÒµ½×îÏÈÖ´ÐеÄÏûÏ¢´¦Àíº¯Êý¡£
ÒªÔÚ¸Õ¸Õ×·×Ùµ½µÄ**addMessageNode:layout:addMoreMsg:**·½·¨Öдò¶Ïµã£¬Ê×ÏÈÎÒÃǵÃÖªµÀËüÔÚÔËÐÐʱµÄÄÚ´æµØÖ·£¬ÄÇôÄÚ´æµØÖ·ÔõôÀ´ÄØ£¿ÓÐÕâôһ¸ö¹«Ê½£º
ÄÚ´æµØÖ·£½½ø³ÌÄÚ´æ»ùµØÖ·£«º¯ÊýÔÚ¶þ½øÖÆÖÐµÄÆ«ÒÆÁ¿
Ê×ÏÈÆ«ÒÆÁ¿ÎÒÃÇ¿ÉÒÔͨ¹ý·´»ã±à¹¤¾ßhooperÀ´²é£¬ÔÚpcÉÏÓÃhooper´ò¿ªÎ¢ÐŵĶþ½øÖÆÎļþ£¨×¢Ò⣬´ò¿ªÊ±»áÈÃÄãÑ¡Ôñarmv7»òÕßarm64£¬ÕâÐèÒª¸ù¾ÝÄãÔ½ÓüÊÖ»úµÄcpuÀàÐÍÀ´Ñ¡£¬Ò»¶¨ÒªºÍÄãµÄÊÖ»úÒ»Ö£©£¬hooperµÄ½çÃæ·Ç³£¼ò½à£¬×ó²àÓиöËÑË÷¿ò£¬¿ÉÒÔÊäÈ뺯ÊýÃû£¬Ö±½ÓÕÒµ½º¯ÊýÔÚ¶þ½øÖÆÖеÄλÖÃ

ͨ¹ý×ó²àµÄËÑË÷¿òËÑaddMessageNode¹Ø¼ü×Ö£¬ÕÒµ½ËüµÄÆ«ÒÆÁ¿ÊÇ0x00000001017d7c6c£º

ÕÒµ½ÁËÆ«ÒÆÁ¿£¬»¹ÐèÒª½ø³ÌµÄ»ùµØÖ·£¬Õâ¸öµØÖ·ÐèÒªÁ¬lldb£¬ËùÒÔÏÂÃæ½²Ò»ÏÂÈçºÎÁ¬½Ólldb½øÐÐÔ¶³Ìµ÷ÊÔ£¬ÏÈssh½øÔ½ÓüÊÖ»úµÄÖÕ¶Ë£¬ÔÚÖÕ¶ËÊäÈëÈçÏÂÃüÁעÒ⣬ÄãµÄÊÖ»ú±ØÐëÁ¬xcodeµ÷ÊÔ¹ý²Å»áÓÐÕâ¸öÃüÁ£º
debugserver *:19999 -a WeChat |
È»ºóÔÚpc¶ËÐÂÆðÒ»¸öÖÕ¶Ë´°¿Ú£¬ÊäÈëÈçÏÂÃüÁîÀ´Á¬½ÓÊÖ»ú¶Ë½øÐе÷ÊÔ£º
lldb -> process connect connect://deviceIP:19999 |
Èç¹ûÁ¬½Ó³É¹¦£¬»á½øÈëlldbµÄ¿ØÖÆÌ¨£¬ÎÒÃÇÔÚlldbµÄ¿ØÖÆÌ¨ÊäÈëÈçÏÂÃüÁîÀ´»ñȡ΢ÐŽø³ÌµÄ»ùµØÖ·£º
Ö´ÐÐÕâ¸öÃüÁî»á´òÓ¡ºÜ¶àÐÐÊý¾Ý£¬ÏñÏÂÃæÍ¼ÖÐÕâÑù£¬ÎÒôҪÕÒµ½Î¢ÐŵĶþ½øÖÆÎļþËùÔÚµÄÐУ¬¼Ç¼ËüµÄÄÚ´æµØÖ·0X00000000000E800£º

µ½ÕâÀïÎÒÃÇÁ½¸öµØÖ·¶¼ÕÒµ½ÁË£¬ÔÙͨ¹ýbrÃüÁî´ò¶Ïµã£º
br s -a '0X00000000000E800+0x00000001017d7c6c' |
´òºÃ¶Ïµãºó¼ÌÐøÏòȺÀïÃæ·¢ÏûÏ¢£¬ÎÒÃǻᷢÏÖ½ø³Ì±»¶ÏµôÁË£¬ÕâʱÊäÈëbtÖ¸Á¾Í¿ÉÒÔ¿´µ½µ±Ç°µÄµ÷ÓÃÕ»£¬¾ÍÏñÏÂͼÕâÑù£º

·ÖÎö¶ÑÕ»µÄʱºò£¬ÖصãÕÒ³öÄ£¿éʱWeChatµÄÏÕâЩ¶¼ÊÇ΢ÐÅÄ£¿éµÄ·½·¨µ÷Óã¬ÓÐÁ˶ÑÕ»£¬ÎÒÃÇÐèÒª¸ù¾Ý¶ÑÕ»µÄÄÚ´æµØÖ·ÕÒ³öËüµÄ¾ßÌ庯ÊýÃû£¬Ë¼Â·»¹ÊÇÏȸù¾ÝÉÏÃæ½²µ½µÄ¹«Ê½À´¼ÆËã³öÕ»µØÖ·ÔÚ¶þ½øÖÆÖÐµÄÆ«ÒÆÁ¿£¬È»ºóÓÃhooperÕÒµ½Æ«ÒÆÁ¿¶ÔÓ¦µÄº¯ÊýÃû
º¯ÊýÔÚ¶þ½øÖÆÖÐµÄÆ«ÒÆÁ¿£½ÄÚ´æµØÖ· - ½ø³ÌÄÚ´æ»ùµØÖ·
ÀýÈç¸ù¾Ý¼ýÍ·ËùÖ¸µÄÄÚ´æµØÖ·ºÍ¸Õ¸ÕµÃµ½µÄ½ø³Ì»ùµØÖ·£¬¼ÆËãÆ«ÒÆÁ¿£º
0x0000000101ad02f4 ¨C 0x00000000000e8000 = 1019E82F4 |
È»ºóÔÚhooperÖÐËÑË÷Õâ¸öµØÖ·£¬µÃµ½½á¹ûÈçÏ£º

×îÖÕ°ÑËùÓеÄÕ»¶¼½øÐл¹Ô£¬µÃ³öµ÷ÓÃÕ»ÊÇÕâ¸öÑù×ӵģº
-[CMessageMgr MainThreadNotifyToExt:]: ¨C> -[BaseMsgContentLogicController OnAddMsg:MsgWrap:]: ¡ª¡ª> -[RoomContentLogicController DidAddMsg:] ¡ª¡ª¡ª-> -[BaseMsgContentLogicController DidAddMsg:] ¡ª¡ª¡ª¡ª¡ª-> -[BaseMsgContentViewController addMessageNode:layout:addMoreMsg:]: |
CMessageMgrÕâ¸öÀม³öË®ÃæÁË£¬ÊÇʱºò·¢»ÓºÚ¿ÍµÄÐá¾õÁË£¬¸ù¾Ý·½·¨ÃûÎÒÃÇÄÜÅжϳöMainThreadNotifyToExt:Õâ¸ö·½·¨½ö½öÊÇÓÃÀ´·¢ËÍ֪ͨµÄ£¬Èç¹ûhookÕâ¸ö·½·¨£¬ÎÒÃÇÊÇÄò»µ½ÏûÏ¢ÄÚÈݵÄ
ÓÉÓÚÕâÀï¿ÉÄÜÊÇÒ»¸öÒì²½µ÷Óã¬ÓöϵãµÄ·½Ê½£¬¿ÉÄÜÒѾ´òÓ¡²»³öÀ´Õ»ÐÅÏ¢ÁË£¬ËùÒÔ»¹µÃʹÓÃlogifyÀ´¼ÌÐø×·×ÙCMessageMgrÕâ¸öÀ࣬½²¹ýµÄÄÚÈÝÎҾͲ»Öظ´ÁË£¬Ö±½ÓµÃµ½×îÖÕµÄÏûÏ¢´¦Àíº¯Êý£º
-(void)AsyncOnAddMsg:(id)message MsgWrap:(CMessageWrap* )msgWrap |
ʵÏÖ¡°ÇÀ¡±µÄ¶¯×÷
ÉÏÒ»½ÚÎÒÃÇÒѾÕÒµ½ÁËhookµÄ¹Ø¼üµã£¬ÄÇô¸ÃÈçºÎȥʵÏÖÇÀµÄ¶¯×÷£¿Í¬ÑùÎÒÃÇÐèÒª½áºÏ¶¯Ì¬·ÖÎöºÍ¾²Ì¬·ÖÎö£¬Ê×Ïȵõ½ºì°üÏûÏ¢ÌåµÄÊý¾ÝÌØÕ÷£¬È»ºóÔÙ·ÖÎö´¦ÀíÏûÏ¢µÄ¹Ø¼üµã
Êý¾Ý°ü·ÖÎö
Ê×ÏÈÎÒÃǵĴúÂëÐèÒª·Ö±æÄÄЩ²ÅÊǺì°üÏûÏ¢£¬·½·¨ºÜ¼òµ¥£¬ÓÃlogify×·×ÙBaseMsgContentViewController£¬È»ºóÏò΢ÐÅȺ·¢Ò»¸öºì°ü£¬¹Û²ìÊÖ»úÈÕÖ¾Êä³ö£¬ÎÒÃÇ¿ÉÒÔ¿´³öÏûÏ¢µÄÊý¾Ý½á¹¹ÖÐÓиötype×ֶΣ¬ÖµÊÇ49£¬Õâ¸ötypeÓ¦¸Ã¾ÍÊDZê¼ÇÏûÏ¢ÀàÐ͵ģ¬Èç¹û²»È·¶¨£¬¿ÉÒÔÔÙ·¢¸öͼƬ»òÕßÎı¾Ö®ÀàµÄÏûÏ¢£¬Õâ¸öÖµÊDz»Í¬µÄ£º
Administratorde-iPhone
WeChat[47410] <Notice>: [1;36m[WxMsgPreview]
[m[0;36mTweak.xm:308[m [0;30;46mDEBUG:[m -[<BaseMsgContentViewController:
0x15e0c9a00> addMessageNode:{m_uiMesLocalID=16,
m_ui64MesSvrID=1452438635530425509, m_nsFromUsr=1037957572@chatroom,
m_nsToUsr=ccg*675~9, m_uiStatus=4, type=49, msgSource="<msgsource>
<silence>0</silence>
<membercount>3</membercount>
</msgsource>
"} layout:1 addMoreMsg:0]
|
ÏÖÔÚÎÒÃÇÄÜ·Ö±æÏûÏ¢ÀàÐÍÁË£¬ÖصãÀ´ÁË£¬ÔõôʵÏÖÇÀÕâ¸öÊÂÄØ£¬¿ÉÄÜ´ÏÃ÷ÈËÒѾ²Âµ½ÁË£¬´ÓuiÈëÊÖ£¬ÏÈÕÒµ½Î¢Ðű¾ÉíµÄÇÀºì°üº¯Êý£¬ÎÒÃÇ×Ô¼ºÀ´¸øËü¹¹Ôì²ÎÊý²¢µ÷ÓÃËû²»¾ÍÐÐÁË£¿

°Ñºì°üµã¿ªºó£¬ÓÃcycript´òÓ¡³öµ±Ç°viewµÄ²ã´Î£¬¾ÍÏñÏÂÃæÕâ¸ö£¬Ò»Ñ۾ͿÉÒÔ¿´µ½Öص㣬WCRedEnvelopesReceiveHomeView¾ÍÊÇ¿ªºì°üµ¯¿òµÄÀàÃû

ÖªµÀÀàÃûºó£¬ÓÃcycript×·×ÙËü£¬µã»÷¿ªºì°ü£¬ÔÚÈÕÖ¾ÖÐÕÒµ½ÁËÏÂͼÖеÄÄÚÈÝ£¬´ÓÃû×ÖÀ´¿´£¬ÕâÊÇÒ»¸öʼþ´¦Àíº¯Êý£¬ÎÒÃÇÏÖÔÚÒª×öµÄ£¬¾ÍÊǰÑËû»¹Ô³Éoc´úÂë£¬ÕæÕýʵÏÖÇÀºì°ü¹¦ÄÜ
Administratorde-iPhone
WeChat[91173] <Notice>:
[1;36m[WxMsgPreview] [m[0;36mTweak.xm:8[m
[0;30;46mDEBUG:
[m -[<WCRedEnvelopesReceiveHomeView:
0x13cdda8c0> OnOpenRedEnvelopes]
|
¾²Ì¬·ÖÎö·¨
Ôõô°ÑËû»¹Ô³Éoc´úÂë£¬ÕæÕýʵÏÖÇÀºì°ü¹¦ÄÜÄØ£¿»¹µÃ½èÖúÒ»µãµã»ã±à¼¼ÄÜ£¬Ö»ÊÇÒ»µãµã¶øÒÑ£¬ÒòΪÏÖÔڵķ´»ã±à¹¤¾ßÒѾºÜÇ¿´óÁË£¬ÎÒÃDz»ÐèÒª°¤¸öÈ¥¿´¼Ä´æÆ÷ÁË
ÔÚpcÉÏÓÃhooper´ò¿ªÎ¢ÐŵĶþ½øÖÆÎļþ£¬ËÑË÷OnOpenRedEnvelopes£¬²é¿´»ã±à´úÂ룬עÒâÔÚͼƬÖÐ×îºóÒ»Ðе÷ÓÃÁËÒ»¸öWCRedEnvelopesReceiveHomeViewOpenRedEnvelopesº¯Êý

¼ÌÐøËÑË÷WCRedEnvelopesReceiveHomeViewOpenRedEnvelopesÕâ¸ö·½·¨£¬ÕÒµ½ËüµÄ»ã±à´úÂë
Ê×ÏÈËû²»ÖªµÀ´ÓÄÄÀï»ñÈ¡ÁËÒ»¸öpayinfoitem
È»ºóÓÖ»ñÈ¡ÁËpayinfoµÄm_c2cNativeUrlÊôÐÔ
È»ºóµ÷ÓÃsubstringfromindex°ÉnavtiveurlµÄǰ׺½Ø¶Ï£¬²¢µ÷ÓÃbizutilµÄÒ»¸ö·½·¨°Ñurl²ÎÊýת»»³ÉÁËÒ»¸ö×Öµä

×îÖÕ·´½â³öµÄ´úÂëÈçÏ£¬ÊDz»ÊǺܼòµ¥£¿
NSString *nativeUrl = [[msgWrap m_oWCPayInfoItem] m_c2cNativeUrl]; nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?" length]]; NSDictionary *nativeUrlDict = [%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl separator:@"&"];
|
¼ÌÐøÍùÏ¿´, ÔÚÕâÀïÇ°ÃæÈýÐд´½¨ÁËÒ»¸ömutable dictionary£º
½ô½Ó×ÅÏÂÃæÈý¸ö¿ò¿ò´¦¶¼Êǵ÷ÓÃÁËsetobject£ºforkey£ºÏòÀïÃæÌî¶«Î÷£¬ÄÇÌîµÄ¶«Î÷ÊÇɶĨ£¿
ÆäʵÕâÀïÒѾ¿ÉÒÔ¿´µÄºÜÇå³þÁË£¬µÚÒ»¸ökeyÊÇmsgtype£¬ÖµÊÇ×Ö·û´®1£¬µÚ¶þ¸ösendid£¬ÖµÊǵ÷ÓÃÁËÒ»¸öobjectforkey´ÓÁíÒ»¸ö×ÖµäÖÐÈ¡³öÀ´µÄ£¬ºÜÏÔÈ»£¬ÁíÒ»¸ö×Öµä¾ÍÊÇÉÏÃæ´Óurl½âÎöµÃµ½µÄ£¬ºóÃæµÄchannelidÒ²ÊÇͬÑùµÄµÀÀí

×îÖյõ½µÄ´úÂëÈçÏ£º
NSMutableDictionary *args = [[%c(NSMutableDictionary) alloc] init]; [args setObject:nativeUrlDict[@"msgtype"] forKey:@"msgType"]; [args setObject:nativeUrlDict[@"sendid"] forKey:@"sendId"]; [args setObject:nativeUrlDict[@"channelid"] forKey:@"channelId"];
|
¼ÌÐøÍùÏ¿´´Ó¼ýÍ·ËùÖ¸µÄ¼¸´¦£¬ÎÒÃÇ¿ÉÒÔ¿´¼û£¬ËüµÄ´úÂëÊÇÕâÑùµÄ£¬¹²·ÖΪËIJ½
µÚÒ»¸ö¼ýÍ·µ÷ÓÃÁËmmservicecenterµÄdefaultcenter·½·¨À´»ñÈ¡mmservicecenterʵÀý
µÚ¶þ¸ö¼ýÍ·µ÷ÓÃÁËCContactMgrµÄclass·½·¨
µÚÈý¸ö¼ýÍ·µ÷ÓÃÁ˵ÚÒ»²½»ñÈ¡µÄmmservicecenterʵÀýµÄgetservice·½·¨£¬¶øÕâ¸ö·½·¨Êǰѵڶþ²½µÃµ½µÄclass×÷Ϊ²ÎÊý
µÚËĸö¼ýÍ·ºÜÃ÷°×Á˰ɣ¬µÚÈý²½µÃµ½ÁËCContactMgrʵÀý£¬ÕâÀï¾ÍÊǵ÷ÓÃCContactMgrʵÀýµÄgetselfcontact·½·¨»ñÈ¡×Ô¼ºµÄÕË»§×ÊÁÏ

×îÖÕ»¹ÔµÄµ½µÄ´úÂëÈçÏ£º
CContactMgr
*contactManager = [[%c(MMServiceCenter) defaultCenter]
getService:[%c(CContactMgr) class]];
CContact *selfContact = [contactManager
getSelfContact];
|
¼ÌÐøÍùÏ¿´£¬ÕâÀïʹÓøոյõ½µÄselfcontactÀ´»ñÈ¡displaynameºÍheadimgurl£¬²¢°ÑËüÃÇÉèÖõ½¸Õ¸ÕµÄ×ÖµäÀïÃæÁË£¬key·Ö±ðÊÇnicknameºÍheadimg

×îÖյĴúÂ룺
[args
setObject:[selfContact getContactDisplayName]
forKey:@"nickName"];
[args setObject:[selfContact
m_nsHeadImgUrl] forKey:@"headImg"];
|
½Ó×Å¿´£¬½ÓÏÂÀ´ÕâÁ½¶Î¾Í±È½Ïµ°ÌÛÁË£¬ÍêÈ«ÊÇ´ÓÄÚ´æµØÖ·ÀïÃæÈ¡µÄÖµ£¬ÎÒÒ²²»ÖªµÀËû´ÓÄÄÀïÀ´£¬Ôõô°ìÄØ£¿ÓÐûÓв»¶®»ã±à¾ÍÄܸ㶨ËüµÄ½Ý¾¶ÄØ£¬´ð°¸ÊÇÓУ¡
¶ÔÓÚµÚÒ»¸ö£¬ÎÒ¿ÉÒÔͨ¹ýËüµÄkey²Â³öÀ´£¬»¹¼ÇµÃ×ʼµÄʱºòÎÒÃÇÈ¡¹ýpayinfoµÄÒ»¸önativeurlÊôÐÔ°É£¬ÎÒÃǹÃÇÒ°ÑËû´«½øÈ¥
¶ÔÓÚµÚ¶þ¸ö£¬ÎÒÃÇ¿ÉÒԲ²âsessionUserName´ó¸ÅÊǻỰÃû³Æ£¬Ò²¾ÍÊÇȺÃû³ÆµÄÒâ˼£¬´ÓÄÄÀïÈ¡Õâ¸öֵĨ£¿ÎÒÃÇÏȰÑÒ²ÉèÖóÉα´úÂë

×îÖյĽá¹ûÈçÏ£º
[args
setObject:nativeUrl forKey:@"nativeUrl"];
[args setObject:xxx forKey:@"sessionUserName"];
|
¼ÌÐøÍùÏ¿´£¬½ÓÏÂÀ´ÕâÒ»¶Î»¹ÊÇÓÃmmservicecenterÀ´»ñÈ¡WCRedLogicMgr¶ÔÏó£¬È»ºóµ÷ÓÃWCRedLogicMgrµÄopen·½·¨À´²ðºì°ü£¬¿ÉÒÔÏëÏóopen·½·¨µÄ²ÎÊý¾ÍÊÇÉÏÃæÎÒÃÇÐÁ¿à×é×°µÄ×Öµä

´úÂëÈçÏ£º
[[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr)
class]] OpenRedEnvelopesRequest:args]; |
Áìºì°üÂß¼
µ½ÕâÀÎÒÃÇÔÙ×ܽáÒ»ÏÂÎÒÃÇÉÏÃæ·ÖÎöµÄ¹ý³Ì¡
µÃµ½m_oWCPayInfoItemÊôÐÔ
½âÎöm_oWCPayInfoItemµÄm_c2cNativeUrlÊôÐÔ
µÃµ½selfcontact
×é×°Ïà¹Ø²ÎÊý
µ÷ÓÃOpenRedEnvelopesRequest:ÁìÈ¡ºì°ü
×îÖÕµÄÇÀºì°ü´úÂëºÏ²¢ÆðÀ´ÈçÏ£º
#import
"WxMsgPreview.h"
%hook CMessageMgr
-(void)AsyncOnAddMsg:(id)message
MsgWrap:(CMessageWrap* )msgWrap {
%log;
%orig;
if(msgWrap.m_uiMessageType ==
49){
CContactMgr *contactManager =
[[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr)
class]];
CContact *selfContact = [contactManager
getSelfContact];
if ([msgWrap.m_nsContent rangeOfString:@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao"].location
!= NSNotFound) { // ºì°ü
NSString *nativeUrl = [[msgWrap
m_oWCPayInfoItem] m_c2cNativeUrl];
nativeUrl = [nativeUrl substringFromIndex:[@"wxpay://c2cbizmessagehandler/hongbao/receivehongbao?"
length]];
NSDictionary *nativeUrlDict =
[%c(WCBizUtil) dictionaryWithDecodedComponets:nativeUrl
separator:@"&"];
NSMutableDictionary *args = [[%c(NSMutableDictionary)
alloc] init];
[args setObject:nativeUrlDict[@"msgtype"]
forKey:@"msgType"];
[args setObject:nativeUrlDict[@"sendid"]
forKey:@"sendId"];
[args setObject:nativeUrlDict[@"channelid"]
forKey:@"channelId"];
[args setObject:[selfContact
getContactDisplayName] forKey:@"nickName"];
[args setObject:[selfContact
m_nsHeadImgUrl] forKey:@"headImg"];
[args setObject:nativeUrl forKey:@"nativeUrl"];
[args setObject:msgWrap.m_nsFromUsr
forKey:@"sessionUserName"];
[[[%c(MMServiceCenter) defaultCenter]
getService:[%c(WCRedEnvelopesLogicMgr) class]]
OpenRedEnvelopesRequest:args];
}
}
}
%end
|
¸Õ²Å˵ÁË£¬ÓÐÁ½¸öÒÉÄѵãûÓнâ¾ö:
µÚÒ»£ºÎÒÃDz»ÖªµÀpayinfoÊÇÄÄÀïÀ´µÄ£¬
µÚ¶þ£ºsessionusernameÎÒÃÇÒ²²»ÖªµÀÊÇÄÄÀïÀ´µÄ
ÕâʱºòÎÒÃÇ¿ÉÒÔ´ÓÎÒÃÇ×¢ÈëµãµÄ²ÎÊýÈëÊÖ£¬Ê×ÏÈÓÃlogify´òÓ¡³öaddmsg·½·¨µÄ²ÎÊýÐÅÏ¢£¬»á·¢ÏÖ£¬ËüµÄµÚ¶þ¸ö²ÎÊý¸ÕºÃÓÐÒ»¸öpayinfoµÄÊôÐÔ£¬ÕâÑùµÚÒ»¸öÎÊÌâÓÈжø½âÁË
µÚ¶þ¸öÎÒÃÇÒѾ²Â²âµ½Ëü´ú±íȺÃû³Æ£¬ËùÒÔÎÒÃÇ´ÓÐ޸ÎȺÃû³Æ£¬È»ºóÔÙ¹Û²ìlogify´òÓ¡³öµÄ²ÎÊýÖµµÄ±ä»¯£¬¾Í¿ÉÒÔÈ·Èϳö´ÓÄÄÀïÈ¡ÁË
ͨ¹ýÒ»·¬ÕÛÌÚ£¬µÃ³öÁËÇÀºì°üµÄºËÐÄ´úÂ룬ÔÙ½áºÏÉÏÃæÕ½ÚËù½²µÄtheosÖÆ×÷tweak°üµÄ·½·¨£¬´ò°ü²¢°²×°µ½ÊÖ»ú£¬·¢¸öºì°üÊÔÊÔ£¬ÊDz»ÊÇÃëÇÀ£¿
ÃâÔ½Óü²å¼þ
¼ì²éÒÀÀµÏî
Èç¹ûÉ豸ûÓÐÔ½Óü£¬ÊÇûÓÐmobilesubstrateµÈ»·¾³µÄ£¬¶øÇÒһЩϵͳĿ¼ÊÇûÓжÁдȨÏ޵ģ¬ÕâʱÎÒôֻÄÜ´ÓÄ¿±êappµÄ¶þ½øÖÆÎļþÈëÊÖ£¬Í¨¹ýÊÖ¶¯ÐÞ¸Äload
commandsÀ´¼ÓÔØ×Ô¼ºµÄdylib£¬ÄÇôÉÏÃæÎÒÃǵIJå¼þÓÖÊÇʹÓÃtheos»ùÓÚmobilesubstrate±àÒëµÄ£¬ÓÐûÓа취ȷ¶¨ÎÒÃǵÄdylibÓÐûÓÐÒÀÀµÆäËûµÄ¿âÄØ£¿
ʹÓÃosx×Ô´øµÄotool¹¤¾ß¼´¿É£¬¿ÉÒÔ¿´³ö£¬ÎÒÃǵÄlibÊÇÒÀÀµÓÚsubstrate¿âµÄ£¬ÆäËûµÄ¶¼ÊÇϵͳ¿â£¬ËùÒÔÎÒÃÇ´ÓÔ½ÓüÉ豸ÖаÑcydiasubstrateÎļþcopy³öÀ´ÖØÃüÃûΪlibsunstrate.dylib£¬ºÍÎÒÃǵÄdylibÒ»Æð·ÅÈëwechat.appĿ¼ÖÐ
×îºóʹÓÃinstall_name_toolÃüÁîÐ޸Ķ¯Ì¬¿âµÄ·¾¶°ÑËüÖ¸Ïòapp¶þ½øÖÆÎļþµÄͬ¼¶Ä¿Â¼

ÖÆ×÷°²×°°ü
½â¾öÁËÒÀÀµÎÊÌ⣬ȻºóÒª°ÑÎÒÃǵĿâ×¢Èëµ½¶þ½øÖÆweixinµÄ¶þ½øÖÆÎļþ£¬ÕâÒ»²½Ê¹ÓÿªÔ´µÄinsert_dylib¼´¿É
£¨@executable_pathÊÇÒ»¸ö»·¾³±äÁ¿£¬Ö¸µÄÊǶþ½øÖÆÎļþËùÔڵķ¾¶£©
insert_dylibÃüÁî¸ñʽ£º ./insert_dylib ¶¯Ì¬¿â·¾¶ Ä¿±ê¶þ½øÖÆÎļþ |
//×¢È붯̬¿â ./insert_dylib [@executable_path](/user/name/executable_path)/wxmsgpreview.dylib WeChat //´ò°ü³Éipa xcrun -sdk iphoneos PackageApplication -v WeChat.app -o ~/WeChat.ipa |
×îºóʹÓÃÓÃÆóÒµÖ¤Êé»òÕß¿ª·¢Ö¤ÊéÇ©Ãû¶ÔipaÖØÐÂÇ©Ãû£¬¾Í¿ÉÒԷŵ½×Ô¼ºµÄÇþµÀ½øÐз¢²¼ÁË£¡
½áÓï
ͨ¹ý×ÛºÏÔËÓø÷ÖÖ¹¤¾ß£¬½øÐо²Ì¬ºÍ¶¯Ì¬·ÖÎö£¬ÎÒÃÇͨ¹ýÊµÕ½ÆÆ½âÁË΢ÐŵÄÇÀºì°üÂß¼£¬Ã÷°×ÁËÈëÇÖ³£ÓõŤ¾ß£¬ÉÏÃæµÄÇÀºì°ü´úÂ뻹Óкܶà¸Ä½øÖ®´¦£¬±ÈÈçûÓÐÅжϺì°üµÄ·¢ËÍÕßÊDz»ÊÇ×Ô¼º¡¢Ò²Ã»ÓÐÅжϺì°üÀïÃæµÄÎÄ×ÖÊDz»ÊÇÇÀ´íÈý±¶£¬ÓÐÐËȤµÄͯЬ¿ÉÒÔ³¢ÊÔÓÅ»¯Ò»Ï£¡
|