|
[讨论]看雪将迎来新的社区优化升级,小伙伴们赶快来讨论吧!(有礼物)
1.关于课程的建议 整体感觉课程偏少,基础入门的课程走量且免费,前期数量>质量,先大量吸引人气,中高端的课程收费并一定控制好质量,先把课程做起来主要原因有二:以课程带动帖子、书和工具,学习课程一定要看书,遇到问题要交流,增加论坛活跃性,另外人流导入现金流,有稳定的现金流再发展一些深入研究、需要时间沉淀、烧钱的项目,以点带面。 2.三年后的样子 to C:以课程教学为主,同时带动书、论坛、工具等的生态良性循环,个人觉得像精华集等都是很宝贵的,课程是把这些资源一个很好的资源整合并呈现 to B:智能设备,区块链,车联网,金融科技,自动驾驶,人工智能等方向提供企业级安全服务 |
|
|
|
|
|
[原创]《Android软件安全与逆向分析》样章
期待,早日先睹为快............ |
|
[原创]Trojan-Spy.AndroidOS.Zitmo.a病毒分析
对android分析感兴趣的同学可以私聊我,推荐工作哟,正规公司。发信息时注明"android分析",要求至少两篇原创分析,有一定难度.... |
|
[求助]android 下的hook
SmaliHook文件源码 ----------------------------- import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; import android.util.Log; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class SmaliHook extends Activity { private static boolean DEBUG = false; private static boolean DUMP_STACK = false; private static String LOG_TAG = "lohan"; public static void DumpStackIfWeShould() { if (!DUMP_STACK) return; StackTraceElement[] arrayOfStackTraceElement = Thread.currentThread().getStackTrace(); String str = "Stack trace:\n"; for (int i = 4; ; i++) { if (i >= arrayOfStackTraceElement.length) { Log.d(LOG_TAG, str); break; } str = str + " " + arrayOfStackTraceElement[i].toString() + "\n"; } } public static int checkSignatures() { if (DEBUG) Log.d(LOG_TAG, "checkSignatures returning true"); DumpStackIfWeShould(); return 0; } public static int checkSignatures(String paramString1, String paramString2) { if (DEBUG) Log.d(LOG_TAG, "checkSignatures returning true"); DumpStackIfWeShould(); return 0; } public static int getApplicationEnabledSetting(PackageManager paramPackageManager, String paramString) { try { int j = paramPackageManager.getApplicationEnabledSetting(paramString); i = j; if (i == 2) i = 0; if (DEBUG) Log.d(LOG_TAG, "enabledSetting returning " + i); DumpStackIfWeShould(); return i; } catch (IllegalArgumentException localIllegalArgumentException) { while (true) int i = 0; } } public static String getInstallerPackageName(String paramString) { if (DEBUG) Log.d(LOG_TAG, "getInstallerPackageName returning " + "com.google.android.feedback"); DumpStackIfWeShould(); return "com.google.android.feedback"; } public static PackageInfo getPackageInfo(PackageManager paramPackageManager, String paramString, int paramInt) throws PackageManager.NameNotFoundException { try { PackageInfo localPackageInfo2 = paramPackageManager.getPackageInfo(paramString, paramInt); localPackageInfo1 = localPackageInfo2; if ((paramInt & 0x40) == 64) { arrayOfSignature = spoofSignatures(); i = 0; if (i >= localPackageInfo1.signatures.length) { if (DEBUG) Log.d(LOG_TAG, "spoofing signatures for " + paramString); DumpStackIfWeShould(); } } else { return localPackageInfo1; } } catch (PackageManager.NameNotFoundException localNameNotFoundException) { while (true) { Signature[] arrayOfSignature; int i; if ((!paramString.toLowerCase().contains("pro")) && (!paramString.toLowerCase().contains("full")) && (!paramString.toLowerCase().contains("donate")) && (!paramString.toLowerCase().endsWith("key"))) throw new PackageManager.NameNotFoundException(); PackageInfo localPackageInfo1 = paramPackageManager.getPackageInfo("com.sp.protector", paramInt); continue; localPackageInfo1.signatures[i] = arrayOfSignature[i]; i++; } } } public static Object invokeHook(Method paramMethod, Object paramObject, Object[] paramArrayOfObject) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, PackageManager.NameNotFoundException { String str1 = paramMethod.getName(); String str2; String str3; int k; Object localObject3; label72: Object localObject5; if (paramObject != null) { str2 = paramObject.getClass().getName(); if (DEBUG) { str3 = "Invoke Hook: " + str2 + "." + str1 + "("; if (paramArrayOfObject == null) break label572; int j = paramArrayOfObject.length; k = 0; localObject3 = ""; if (k < j) break label182; if (((String)localObject3).length() <= 2) break label565; localObject5 = ((String)localObject3).substring(0, ((String)localObject3).length() - 2); } } label103: for (String str4 = str3 + (String)localObject5; ; str4 = str3) { Log.d(LOG_TAG, str4 + ")"); DumpStackIfWeShould(); Object localObject1; if (1 == 0) localObject1 = paramMethod.invoke(paramObject, paramArrayOfObject); while (true) { return localObject1; str2 = paramMethod.getDeclaringClass().getName(); break; Object localObject4 = paramArrayOfObject[k]; String str5 = localObject3 + localObject4.getClass().getName() + ":" + localObject4 + ", "; k++; localObject3 = str5; break label72; if ((str2.equals("android.app.ContextImpl$ApplicationPackageManager")) || (str2.equals("android.app.ApplicationContext$ApplicationPackageManager")) || (str2.equals("android.content.pm.PackageManager")) || (str2.contains("ApplicationPackageManager"))) { if (str1.equals("getInstallerPackageName")) { localObject1 = getInstallerPackageName((String)paramArrayOfObject[0]); continue; } if (str1.equals("getPackageInfo")) { int i = ((Integer)paramArrayOfObject[1]).intValue(); if (str2.equals("android.content.pm.PackageManager")) { localObject1 = getPackageInfo((PackageManager)paramObject, (String)paramArrayOfObject[0], i); continue; } try { Object localObject2 = paramMethod.invoke(paramObject, paramArrayOfObject); localObject1 = localObject2; if ((i & 0x40) != 64) continue; Signature[] arrayOfSignature = spoofSignatures(); ((PackageInfo)localObject1).signatures[0] = arrayOfSignature[0]; } catch (Exception localException) { while (true) { Object[] arrayOfObject = new Object[1]; arrayOfObject[0] = "com.sp.protector"; localObject1 = paramMethod.invoke(paramObject, arrayOfObject); } } } if (str1.equals("getApplicationEnabledSetting")) { localObject1 = Integer.valueOf(getApplicationEnabledSetting((PackageManager)paramObject, (String)paramArrayOfObject[0])); continue; } if (str1.equals("checkSignatures")) { localObject1 = Integer.valueOf(checkSignatures((String)paramArrayOfObject[0], (String)paramArrayOfObject[1])); continue; } } else if ((str2.equals("java.io.File")) && (shouldSpoofFileInfo((File)paramObject))) { if (str1.equals("length")) { localObject1 = Long.valueOf(length((File)paramObject)); continue; } if (str1.equals("lastModified")) { localObject1 = Long.valueOf(lastModified((File)paramObject)); continue; } } localObject1 = paramMethod.invoke(paramObject, paramArrayOfObject); } localObject5 = localObject3; break label103; } } public static long lastModified(File paramFile) { long l = Long.parseLong("1297973242171"); if (DUMP_STACK) Thread.dumpStack(); if (!shouldSpoofFileInfo(paramFile)) { l = paramFile.lastModified(); if (DEBUG) Log.d(LOG_TAG, "spoofing file modified of " + paramFile.getName() + " with " + l); DumpStackIfWeShould(); } return l; } public static long length(File paramFile) { long l = Long.parseLong("353384"); if (!shouldSpoofFileInfo(paramFile)) { l = paramFile.length(); if (DEBUG) Log.d(LOG_TAG, "spoofing file length of " + paramFile.getName() + " with " + l); DumpStackIfWeShould(); } return l; } private static boolean shouldSpoofFileInfo(File paramFile) { int i = 0; if (paramFile.exists()) i = 0; if (paramFile.getName().contains("com.sp.protector")) i = 1; return i; } public static Signature[] spoofSignatures() { int i = Integer.parseInt("55"); Signature[] arrayOfSignature = new Signature[i]; for (int j = 0; ; j++) { if (j >= i) return arrayOfSignature; arrayOfSignature[j] = new Signature("308201e930820152a00302010202044c7b6c58300d06092a864886f70d01010505003038310b3009060355040613026b6f3110300e06035504071307496e6368656f6e311730150603550403130e596f756e672d48616b204a756e673020170d3130303833303038333132305a180f32303630303831373038333132305a3038310b3009060355040613026b6f3110300e06035504071307496e6368656f6e311730150603550403130e596f756e672d48616b204a756e6730819f300d06092a864886f70d010101050003818d0030818902818100866ee8f701db04c2ff4272f837280cab955bce9fa87e4f6b7040f58cf94e83235080013093d121be49a7abab8eee67bba6770c9a50d5648aecca5f82f9ba5b1b409968e02976873efe6fb6a8c8494972d4da5fe80e2102a780353a11807df9979a88a292d51cf5ad80df344f79470235bb1ed782e94d9877d73d54c9638bf5290203010001300d06092a864886f70d01010505000381810031dc83cbcc282afb27df81dcca9b91fcf6fcb63f72325bf71dd82429644537f0ef6b3b3b769bf1967ff14cc782991df01d6bcebbfeba2a6ba058334d44af31fdb0ab2635496a319b86210a43ad9dc9ac4de2ccb57f2b4f770fb97219f264020328763fd1840b528966c4f3c7c74fc62a98a8db2938da8c0844d3933328af9ede"); } } } |
|
[原创]一款android bot分析
顶 一个,沙发.. |
|
[原创]APK反破解之一:Android Java混淆(ProGuard)
逆向.so共享库用什么软件,IDA行不,也能看到些东西... |
|
[分享][下载]android权限大全
好东西,看看先.. |
|
[转帖]apk程序反编译、汉化、修改smali文件
smali语法,Dalvik opcodes 参考 http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html 或android sdk 位置是: reference\Package Index\dalvik.bytecode\ Interfaces\ Opcodes |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值