11;
22//获取WeChatAppEx.exe的基址
3- var module = Process . findModuleByName ( "WeChatAppEx.exe" )
4- var base = module . base
3+ var module = Process . findModuleByName ( "WeChatAppEx.exe" ) ;
4+ var base = module . base ;
55// console.log("模块名称:",module.name);
66// console.log("模块地址:",module.base);
77// console.log("大小:",module.size);
88
9-
10- for ( let key in address ) {
11-
12- address [ key ] = base . add ( address [ key ] ) ;
13- }
9+ Object . keys ( address ) . forEach ( key => {
10+ key != "Version" ? address [ key ] = base . add ( address [ key ] ) : false
11+
12+ } ) ;
1413send ( "[+] WeChatAppEx.exe 注入成功!" ) ;
14+ send ( "[+] 当前小程序版本: " + address . Version ) ;
15+ send ( "[+] 等待小程序加载..." ) ;
1516
1617function readStdString ( s ) {
1718 var flag = s . add ( 23 ) . readU8 ( )
1819 if ( flag == 0x80 ) {
1920 // 从堆中读取
20- var size = s . add ( 8 ) . readUInt ( )
21+ var size = s . add ( 8 ) . readUInt ( )
2122 return s . readPointer ( ) . readUtf8String ( size )
2223 } else {
2324 // 从栈中读取
@@ -43,80 +44,130 @@ function writeStdString(s, content) {
4344 s . add ( 23 ) . writeU8 ( content . length )
4445 }
4546}
47+ function sendMessage ( msg ) {
48+
49+
50+ msg === null || undefined ?send ( msg ) :send ( "[+] 已还原完整F12" )
51+ // send("[+] 已还原完整F12")
52+ }
53+
54+
55+ function replaceParams ( ) {
56+ Interceptor . attach ( address . LaunchAppletBegin , {
57+ onEnter ( args ) {
58+ send ( "[+] HOOK到小程序加载! " + readStdString ( args [ 1 ] ) )
59+ for ( var i = 0 ; i < 0x1000 ; i += 8 ) {
60+ try {
61+ var s = readStdString ( args [ 2 ] . add ( i ) )
62+ var s1 = s . replaceAll ( "md5" , "md6" )
63+ . replaceAll ( '"enable_vconsole":false' , '"enable_vconsole": true' )
64+ . replaceAll ( '"frameset":false' , '"frameset": true' )
65+ //"frameset":false
66+ if ( s !== s1 ) {
67+ writeStdString ( args [ 2 ] . add ( i ) , s1 )
68+ }
69+ } catch ( a ) {
70+ }
71+ }
72+ }
73+ } )
74+
75+ }
76+
77+
4678
4779// 过新版8555检测
4880if ( address . MenuItemDevToolsString ) {
4981 var menuItemDevToolsStringCr = new Uint8Array ( address . MenuItemDevToolsString . readByteArray ( 7 ) ) ;
50- var intptr_ = ( menuItemDevToolsStringCr [ 3 ] & 0xFF ) | ( ( menuItemDevToolsStringCr [ 4 ] & 0xFF ) << 8 ) | ( ( menuItemDevToolsStringCr [ 5 ] & 0xFF ) << 16 ) | ( ( menuItemDevToolsStringCr [ 6 ] & 0xFF ) << 24 ) ;
51- var menuItemDevToolsStringPtrData = address . MenuItemDevToolsString . add ( intptr_ + 7 ) ;
52- Memory . protect ( menuItemDevToolsStringPtrData , 8 , 'rw-' )
53- menuItemDevToolsStringPtrData . writeUtf8String ( "DevTools" ) ;
82+ var intptr_ = ( menuItemDevToolsStringCr [ 3 ] & 0xFF ) | ( ( menuItemDevToolsStringCr [ 4 ] & 0xFF ) << 8 ) | ( ( menuItemDevToolsStringCr [ 5 ] & 0xFF ) << 16 ) | ( ( menuItemDevToolsStringCr [ 6 ] & 0xFF ) << 24 ) ;
83+ var menuItemDevToolsStringPtrData = address . MenuItemDevToolsString . add ( intptr_ + 7 ) ;
84+ Memory . protect ( menuItemDevToolsStringPtrData , 8 , 'rw-' )
85+ menuItemDevToolsStringPtrData . writeUtf8String ( "DevTools" ) ;
86+ replaceParams ( )
87+ setupInterceptor ( )
5488}
5589
5690
57- Interceptor . attach ( address . LaunchAppletBegin , {
58- onEnter ( args ) {
59- send ( "[+] HOOK到小程序加载! " + readStdString ( args [ 1 ] ) )
60- for ( var i = 0 ; i < 0x1000 ; i += 8 ) {
61- try {
62- var s = readStdString ( args [ 2 ] . add ( i ) )
63- // console.log(s)
64- var s1 = s . replaceAll ( "md5" , "md6" )
65- . replaceAll ( '"enable_vconsole":false' , '"enable_vconsole": true' )
66- . replaceAll ( '"frameset":false' , '"frameset": true' )
67- //"frameset":false
68- if ( s !== s1 ) {
69- //send(s1)
70- writeStdString ( args [ 2 ] . add ( i ) , s1 )
71- }
72- } catch ( a ) {
73- }
74- }
91+
92+ function setupInterceptor ( ) {
93+
94+ /**
95+ *
96+ */
97+
98+ switch ( address . Version ) {
99+
100+ case 8555 :
101+ Interceptor . attach ( address . WechatAppHtml , {
102+ onEnter ( args ) {
103+ this . context . rdx = address . WechatWebHtml ;
104+ sendMessage ( )
105+ }
106+ } ) ;
107+
108+ break ;
109+
110+
111+ case 9105 :
112+ Interceptor . attach ( address . SwitchVersion , {
113+ onEnter ( args ) {
114+ this . context . r8 = this . context . rax
115+ sendMessage ( )
116+ }
117+ } )
118+ break ;
119+
120+
121+ default :
122+
123+ break ;
124+
125+
126+
127+
128+
129+ // case "null":
130+ // Interceptor.attach(address.WechatAppHtml, {
131+ // onEnter(args) {
132+ // const webhtml= "68 74 74 70 73 3A 2F 2F 61 70 70 6C 65 74 2D 64 65 62 75 67 2E 63 6F 6D 2F 64 65 76 74 6F 6F 6C 73 2F 77 65 63 68 61 74 5F 77 65 62 2E 68 74 6D 6C";
133+ // var data;
134+ // Process.enumerateModules({
135+ // onMatch: function(module){
136+ // var ranges = module.enumerateRanges('r--');
137+ // for (var i = 0; i < ranges.length; i++) {
138+ // var range = ranges[i];
139+ // var scanResults = Memory.scanSync(range.base, range.size, webhtml);
140+ // if (scanResults.length > 0){
141+ // data = scanResults[0].address
142+ // // console.log('Memory.scanSync() result for range ' + range.base + '-' + range.size + ':\n' + JSON.stringify(scanResults));
143+ // }
144+ // }
145+
146+ // },
147+ // onComplete: function(){
148+
149+ // }});
150+
151+ // this.context.rdx = data
152+ // sendMessage()
153+
154+ // }
155+ // })
156+
157+ // break;
158+
159+
160+ // // case 9105:
161+ // // Interceptor.attach(address.LaunchAppletBegin, {
162+ // // onEnter(args) {
163+ // // this.context.rdx= address.WechatWebHtml;
164+ // // sendMessage()
165+ // // }
166+ // // })
167+ // break;
168+
75169 }
76- } )
77-
78-
79-
80-
81- if ( address . WechatVersionSwitch ) {
82-
83- Interceptor . attach ( address . WechatVersionSwitch , {
84- onEnter ( args ) {
85-
86- this . context . r8 = this . context . rax
87- send ( "[+] 已还原完整F12" )
88- }
89- } )
90-
91- } else {
92- Interceptor . attach ( address . WechatAppHtml , {
93-
94- onEnter ( args ) {
95- const webhtml = "68 74 74 70 73 3A 2F 2F 61 70 70 6C 65 74 2D 64 65 62 75 67 2E 63 6F 6D 2F 64 65 76 74 6F 6F 6C 73 2F 77 65 63 68 61 74 5F 77 65 62 2E 68 74 6D 6C" ;
96- var data ;
97- Process . enumerateModules ( {
98- onMatch : function ( module ) {
99- var ranges = module . enumerateRanges ( 'r--' ) ;
100- for ( var i = 0 ; i < ranges . length ; i ++ ) {
101-
102- var range = ranges [ i ] ;
103- var scanResults = Memory . scanSync ( range . base , range . size , webhtml ) ;
104- if ( scanResults . length > 0 ) {
105- data = scanResults [ 0 ] . address
106- // console.log('Memory.scanSync() result for range ' + range.base + '-' + range.size + ':\n' + JSON.stringify(scanResults));
107- }
108- }
109-
110- } ,
111- onComplete : function ( ) {
112-
113- }
114-
115- } ) ;
116-
117- this . context . rdx = data
118- send ( "[+] 已还原完整F12" )
119-
120- }
121- } )
170+
171+
172+
122173}
0 commit comments