#include "JSGlobalData.h"
#include "SourceCode.h"
-#include "SourceCode4.h"
#include <apr-1/apr_pools.h>
#include <pcre.h>
static Class $CydgetController(objc_getClass("CydgetController"));
static Class $UIFormAssistant(objc_getClass("UIFormAssistant"));
-static Class $SBStatusBarController(objc_getClass("SBStatusBarController"));
+//static Class $SBStatusBarController(objc_getClass("SBStatusBarController"));
static Class $UIWebBrowserView;
static bool Wildcat_, iOS4;
extern "C" void WTFReportAssertionFailure(const char *, int, const char *, const char *) __attribute__((__weak_import__));
extern "C" void *_ZN3WTF8fastFreeEPv __attribute__((__weak_import__));
+static void (*_ZN7WebCore6String6appendEPKtj)(WebCore::String *, const UChar *, unsigned);
+static void (*_ZN7WebCore6String8truncateEj)(WebCore::String *, unsigned);
+
bool CYWeakHell() {
return
&_ZN3JSC7UString3Rep14nullBaseStringE == NULL ||
false;
}
-MSHook(void, _ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE, void **_this, JSC::JSGlobalData *global, int *line, JSC::UString *message) {
+MSHook(void, _ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE, JSC::SourceCode **_this, JSC::JSGlobalData *global, int *line, JSC::UString *message) {
if (!GetParser0())
return __ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE(_this, global, line, message);
else {
SetParser(false, true);
- const uint16_t *data;
- size_t size;
-
- JSC::SourceCode *source(reinterpret_cast<JSC::SourceCode *>(_this[0]));
- JSC::SourceCode4 *source4(reinterpret_cast<JSC::SourceCode4 *>(_this[13]));
-
- if (iOS4) {
- data = source4->data();
- size = source4->length();
- } else {
- data = source->data();
- size = source->length();
- }
+ JSC::SourceCode *source(*_this);
+ const uint16_t *data(source->data());
+ size_t size(source->length());
apr_pool_t *pool;
apr_pool_create(&pool, NULL);
- //NSLog(@"!:%u:%@", size, [[[NSString alloc] initWithBytes:const_cast<char *>(reinterpret_cast<const char *>(data)) length:size encoding:NSUnicodeStringEncoding] autorelease]);
Cycriptify(pool, data, size);
- //NSLog(@"%:%u:%@", size, [[[NSString alloc] initWithBytes:const_cast<char *>(reinterpret_cast<const char *>(data)) length:size encoding:NSUnicodeStringEncoding] autorelease]);
-
- if (iOS4) {
- NSLog(@":*");
- source4->~SourceCode4();
- NSLog(@":@");
- new (source4) JSC::SourceCode4(JSC::UStringSourceProvider::create(JSC::UString(data, size), "cycript://"), 1);
- NSLog(@":#");
- } else {
- source->~SourceCode();
- new (source) JSC::SourceCode(JSC::UStringSourceProvider::create(JSC::UString(data, size), "cycript://"), 1);
- }
+ source->~SourceCode();
+ new (source) JSC::SourceCode(JSC::UStringSourceProvider::create(JSC::UString(data, size), "cycript://"), 1);
apr_pool_destroy(pool);
}
}
+MSHook(void, _ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi, void *_this, const WebCore::String &source, const WebCore::KURL &url, int line) {
+ if (!GetParser0())
+ __ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi(_this, source, url, line);
+ else {
+ const uint16_t *data(source.characters());
+ size_t size(source.length());
+
+ apr_pool_t *pool;
+ apr_pool_create(&pool, NULL);
+
+ Cycriptify(pool, data, size);
+
+ WebCore::String &script(const_cast<WebCore::String &>(source));
+ _ZN7WebCore6String8truncateEj(&script, 0);
+ _ZN7WebCore6String6appendEPKtj(&script, data, size);
+
+ apr_pool_destroy(pool);
+
+ __ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi(_this, source, url, line);
+ }
+}
+
struct State {
unsigned state;
};
[NSURLProtocol registerClass:[CydgetURLProtocol class]];
[NSURLProtocol registerClass:[CydgetCGIURLProtocol class]];
- void (*_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE)(void **, JSC::JSGlobalData *, int *, JSC::UString *);
- dlset(_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE, "_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE");
- if (_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE != NULL)
- MSHookFunction(_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE, MSHake(_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE));
+ if (!iOS4) {
+ void (*_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE)(JSC::SourceCode **, JSC::JSGlobalData *, int *, JSC::UString *);
+ dlset(_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE, "_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE");
+ if (_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE != NULL)
+ MSHookFunction(_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE, MSHake(_ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE));
+ }
void (*_ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE)(void *, int, const UChar *, unsigned, int *, int *, JSC::UString *);
dlset(_ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE, "_ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE");
if (_ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE != NULL)
MSHookFunction(_ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE, MSHake(_ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE));
- struct nlist nl[4];
+ struct nlist nl[7];
memset(nl, 0, sizeof(nl));
nl[0].n_un.n_name = (char *) "__ZN7WebCore13HTMLTokenizer13scriptHandlerENS0_5StateE";
nl[1].n_un.n_name = (char *) "__ZN7WebCore13HTMLTokenizer14notifyFinishedEPNS_14CachedResourceE";
nl[2].n_un.n_name = (char *) "__ZN7WebCore16MIMETypeRegistry29isSupportedJavaScriptMIMETypeERKNS_6StringE";
+ nl[3].n_un.n_name = (char *) "__ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi";
+ nl[4].n_un.n_name = (char *) "__ZN7WebCore6String6appendEPKtj";
+ nl[5].n_un.n_name = (char *) "__ZN7WebCore6String8truncateEj";
nlist("/System/Library/PrivateFrameworks/WebCore.framework/WebCore", nl);
State (*_ZN7WebCore13HTMLTokenizer13scriptHandlerENS0_5StateE)(State);
bool (*_ZN7WebCore16MIMETypeRegistry29isSupportedJavaScriptMIMETypeERKNS_6StringE)(const WebCore::String &);
nlset(_ZN7WebCore16MIMETypeRegistry29isSupportedJavaScriptMIMETypeERKNS_6StringE, nl, 2);
MSHookFunction(_ZN7WebCore16MIMETypeRegistry29isSupportedJavaScriptMIMETypeERKNS_6StringE, MSHake(_ZN7WebCore16MIMETypeRegistry29isSupportedJavaScriptMIMETypeERKNS_6StringE));
+
+ if (iOS4) {
+ void (*_ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi)(void *, const WebCore::String &, const WebCore::KURL &, int);
+ nlset(_ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi, nl, 3);
+ MSHookFunction(_ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi, MSHake(_ZN7WebCore16ScriptSourceCodeC2ERKNS_6StringERKNS_4KURLEi));
+ }
+
+ nlset(_ZN7WebCore6String6appendEPKtj, nl, 4);
+ nlset(_ZN7WebCore6String8truncateEj, nl, 5);
}
+ (id) rootViewController {