安卓android下动静态逆向配合的一般步骤

安卓手游逆向 数据定义指令用来定义程序中用到的常量,字符串,类等数据。const/4 vA,#+B:将数值符号扩展为32位后赋给寄存器vA。const/16 vAA,#+BBBB”:将数据符号扩展为32位后赋给寄存器vAAconst vAA,#+BBBBBBBB:将数值赋给寄存器vAA。const/bigh16 vAA,#+BBBB0000:将数值右边零扩展为32位后赋给寄存器vAA。const-wide/16 vAA,#+BBBB:将数值符号扩展为64位后赋给寄存器对vAA。 阅读详情

一、静态反编译


一开始我是直接用android逆向助手的,一般新手推荐用这个。后来,对其重打包和签名要分开单独操作不爽,就自己写bat来解包、打包、签名。

然后,jd-gui可以看反编译出来的java代码,但是搜索什么的都不方便。

mac下我用Atom(https://atom.io/)去看和查找,用起来非常顺手。

windows下我用notepad++,查找也是挺方便的。


静态逆向的大部分操作其实就是查找,所以有个好的查找工具方便很多。


二、动态调试


在看雪有一篇文章《反编译apk+eclipse中动态调试smali》有详细设置步骤,跟着做即可。

基本上就是字符串配合条件断点等找到关键位置。


这里注意的是,一些品牌的手机在真机调试中会遇到各种问题,比如说华为机器不输出logcat,要进入工程模式打开log开关。其它手机出现各种不能真机调试的都可以网上查查,一般进入工程模式,里面一般有设置调试的选项。


三、界面逆向


界面逆向用android-sdk自带的hierachyview.bat来查看,运气不好只能找控件ID,然后到代码里搜索;运气好的话可以定位到控件的变量名。

无论运气好不好,拿到了控件变量名就可以静态搜索关键位置,配合动态断点来定位代码了。


四、逆向思路


一般快速定位基本是字符串或者界面入手。

最近我在分析一款外国的软件某个核心算法,那软件界面那叫一个简洁(没办法,现在都推崇:简即是美)。

整个app就没几个字符串,所以只能从界面入手。用hierachyview.bat找到了控件的变量名,然后找到调用代码,下断点,看堆栈,慢慢找到底层核心算法的位置。


五、遭遇四大组件


从界面一路分析下来,极大可能遇到android四大组件传输数据的阻拦。

这时候,可以动态打断点看堆栈,运气好的话能继续下去。

但有时候死活不触发想要的逻辑,这样堆栈里就没办法找到下一层的调用。这时候,别死脑筋动态分析到底,这篇文章可是把动静态逆向配合一起讲的。

我们可以通过“类名+函数名+参数类型和个数”查找调用的地方,方法如下:


比如说,有个函数是 

public void setXXX(int a, int b)
但是动态的死活都不没断到这个函数里,其实,调用这个函数的smali语法如下

invoke-static {v1, v2}, Lcom/xyz/smali/j/k;->setXXX(II)V 

我们就在反编译出来的smali目录下,搜索 com/xyz/smali/j/k;->setXXX(II)V 

搜索出来的十有八九就是调用的地方了。


后记:

今天逆向了一天的算法,简单把心得总结下。

有需要的可以加扫描左边的头像二维码,加我微信一起探讨。

微信号:boxertan





Android Native逆向实战:从LoopCrypto看循环加密算法分析与解密 在移动安全与逆向工程领域,理解加密算法原理是分析应用安全性的基础。加密算法通过对数据进行特定变换实现信息保护,其核心通常涉及密钥、运算与循环结构。从技术价值看,掌握算法逆向能力不仅能提升安全研究水平,也是CTF竞赛与漏洞挖掘的关键技能。在实际应用场景中,Android Native层加密因其高性能与隐蔽性,常被用于保护核心逻辑,这要求分析者熟练运用静态分析与动态调试工具。本文以一道典型的“循环加密”CTF题目为例,详细拆解了包含异或操作与索引变换的加密流程,并展示了如何通过Frida动态Hook验证算法逻辑 阅读详情

相关推荐

基于Qwen3-30B与IDA Pro MCP构建离线智能逆向分析工作流

逆向工程是软件安全分析、漏洞挖掘和恶意代码检测的核心技术,其核心原理是通过静态与动态分析手段,解析二进制程序的内部逻辑与数据结构。传统逆向分析高度依赖工程师经验,面对代码混淆、反调试等技术时效率低下。随着大语言模型(LLM)技术的发展,AI辅助逆向成为提升分析效率的新范式。Model Context Protocol(MCP)作为一种新兴协议,实现了LLM与本地工具的深度集成,为逆向工程带来了智能化突破。通过将IDA Pro的静态分析能力通过MCP暴露给本地部署的大模型,工程师可以构建一套离线的、通用的智能

323

Android 逆向实践

五一放假回来,人有点颓废了,最近对Android的逆向有点兴趣,研究了下,顺便写篇文章记录下吧。

bugyinyin的博客 1686

逆向分析中的‘签名’玄学:如何从脱壳后的Dex中定位并还原App的请求加密逻辑

本文深入探讨了安卓逆向工程中的签名追踪技术,从Dex脱壳到请求加密逻辑的还原实战。通过动态分析工具如Frida和Xposed,结合静态分析工具Jadx和Ghidra,详细解析了如何定位和还原App的加密逻辑,并提供了对抗代码混淆的实用技巧和加密算法的精准还原方法。

weixin_29324877的博客 682

记录第一次完整安卓逆向过程笔记

文章目录前言一、安卓逆向的准备二、刷机+配置+安装app1.安卓系统版本2.手机root+面具安装3.xposed安装三.逆向app总结 前言 作为新时代爬虫er,逆向技能是必不可少的,在博主精心学习了几个月js逆向之后,又把矛头指向了安卓逆向,同为逆向,虽然相同点很多,都是不同点也不少,这里记录一下博主初学安卓逆向步入的几个大坑,和完整逆向的过程,希望能够帮助到安卓逆向新人,望周知!! 一、安卓逆向的准备 工欲善其事,必先利其器,这里给大家推荐一下我在本文中使用过的工具(都在网盘链接里,都给你们安排好.

Ig_thehao的博客 3521

【加固技术】ARM平台代码保护之虚拟化

代码的虚拟化即不直接通过CPU而是通过虚拟机来执行虚拟指令。代码虚拟化能有效防止逆向分析,可大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,对于动静态分析有着较强的防御能力。

YAQSecurity的博客 2474

CTF逆向工程入门:从汇编调试到算法破解的实战路线图

逆向工程是理解程序内部逻辑与实现原理的关键技术,广泛应用于软件安全分析、漏洞挖掘和CTF竞赛等领域。其核心在于通过静态分析与动态调试相结合的方法,将编译后的二进制程序从“黑盒”状态逐步还原为可理解的“白盒”逻辑。掌握这项技术,不仅能提升对计算机系统底层运行机制的认识,更能培养强大的逻辑推理与问题解决能力,是安全研究者的必备技能。在CTF逆向题目中,常见考点包括算法逆向、密码识别和虚拟机保护等,解题通常遵循信息收集、静态侦察、动态验证及算法复现的流程。本文基于逆向工程的核心思维,系统梳理了从C语言与汇编基础,

aodiyi6351的博客 344

Android 逆向的过程

观察应用包名和主要活动:通过查看 APK 的清单文件(AndroidManifest.xml),可以确定应用的包名和主要活动,这是应用的入口点。例如,可以在关键的方法调用处、条件判断处或数据处理函数中设置断点,以便在应用执行到这些位置时暂停,观察程序的状态。此时,可以观察寄存器、内存等状态,分析应用的行为。数据结构分析:通过观察内存中的数据结构或反编译后的代码中的类定义,尝试理解应用所使用的数据类型和存储方式。了解目标应用:对要逆向的 Android 应用有一定的了解,包括其功能、用途和可能的安全机制。

m0_57836225的博客 1772

CTF逆向工程入门指南:从零掌握网络安全核心技能

逆向工程是网络安全领域的核心技术之一,它通过分析软件二进制代码来理解其内部逻辑与工作原理。这项技术基于计算机系统底层原理,涉及汇编语言、操作系统和程序结构等基础知识,能够帮助安全人员发现软件漏洞、分析恶意代码。在工程实践中,逆向工程常应用于软件安全审计、漏洞挖掘和恶意软件分析等场景。本文聚焦于CTF竞赛中的逆向工程挑战,详细介绍了静态分析、动态调试等核心方法,并系统梳理了从Ghidra、IDA Pro到x64dbg等工具链的配置与使用技巧,为初学者提供了清晰的学习路径和实战案例。

Eric.Net的专栏 310

IDA Pro7.0使用技巧总结使用

俗话说,工欲善其事,必先利其器,在二进制安全的学习中,使用工具尤为重要,而IDA又是玩二进制的神器,以前在使用IDA的时候,只是用几个比较常用的功能,对于IDA的其他功能没有去研究,于是本着学习的精神,参考着《IDA pro权威指南》(第二版),写下这篇文章,记录自己的学习心得,下面的记录都是在Windows平台下的IDA pro7.0进行的 一些二进制工具 在《IDA pro权威指南》的开篇一两章中,先是介绍了几款常用于二进制研究的工具,我这里简单的记了几个,介绍一波: C++filt: 可以用于显示出c

寻梦&之璐 5408

APP安全工具清单

参考项目ZenTracer,觉得既然可以界面化,那么应该可以把功能做的更加完善一些。BlackDex是一个运行在Android手机上的脱壳工具,支持5.0~12,无需依赖任何环境任何手机都可以使用,包括模拟器。脚本式Android动态调试器,但不支持单步调试Android程序,并且无法对自定义的方法设置断点,因此在使用过程中可能会感到诸多不便,可以根据实际需要使用它。它是一种动态插桩工具,可以插入一些代码到原生app的内存空间去,动态地监视和修改其行为,可对内存空间里的对象方法实现监视、修改甚至替换。

墨痕诉清风的博客 536

STM32 HAL库ADC+DMA配置详解:从CubeMX到实战调试

在嵌入式系统开发中,模数转换器(ADC)是实现传感器数据采集、信号处理等功能的基石。其工作原理是将连续的模拟信号转换为离散的数字量,为微控制器(MCU)提供可处理的数字信息。为了提升系统效率,直接存储器访问(DMA)技术被引入,它作为独立于CPU的数据搬运工,能在不占用CPU资源的情况下,自动完成外设与内存间的数据传输,从而解放CPU以执行更复杂的控制算法或通信任务。这种ADC与DMA的协同工作模式,对于实现高效、实时的数据流处理具有重要价值,广泛应用于电机控制、环境监测、音频处理等场景。本文聚焦于STM3

weixin_30698297的博客 407

【安卓安全】ARM平台代码保护之虚拟化

简介:代码的虚拟化即不直接通过CPU而是通过虚拟机来执行虚拟指令。代码虚拟化能有效防止逆向分析,可大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,对于动静态分析有着较强的防御能力。 背景:现在由于手机APP安全性缺乏导致用户敏感数据泄露的例子越来越多,APP开发者应该从开发阶段到运营阶段都关注APP安全防护问题,无论是...

weixin_30394981的博客 185

昇腾910安装驱动出错,降低Centos7.6的内核版本

Centos7.6 启动内核修改,解决昇腾910安装驱动错误的问题。

深蓝 3300

关于Android开发工程师的从业预期与自我要求

现在对于Android开发有一定的兴趣和想法,在可预见的未来几年内应该会努力向这一方面发展,所以这几天在招聘网站上查阅了一下Android开发工程师相关的任职要求和职位描述,并自己进行了相关的整理,也算是为了自己的Android开发之路提供一个方向吧,作为一个自学的大学生,蒙头乱撞还是蛮累的。 刚刚入坑,有待提高~ 主要内容分为三大部分: 任务和目标 相关技能要求 个人建设 ...

Sinn_优快云的博客 1670

GitHub工业级开源利器:StreamPipes如何简化工业物联网数据分析

Apache StreamPipes是一款GitHub上的工业级开源利器,旨在简化工业物联网数据分析。它通过图形化界面连接各类工业协议数据源,以拖拽方式构建流处理管道,并实现实时可视化,有效降低了数据分析的技术门槛,让业务人员也能自助完成从数据接入到洞察的全流程。

weixin_29279153的博客 181

Pydoll浏览器自动化框架教程

让浏览器自动化回归本质。不再纠缠驱动兼容、不再手动处理验证码、不再因为请求和 UI 分裂而头疼。如果你经常做 Web 自动化、爬虫或者测试,不妨试试 Pydoll。也别忘了给项目点个 ⭐,让作者知道有人喜欢这个工具。👉GitHub 地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 204

Unity游戏逆向:Il2Cpp元数据损坏的深度修复与重建实战

在软件逆向工程领域,元数据是理解程序结构和逻辑的关键信息,它定义了类型、方法和字段等核心元素。其原理在于,编译器会将高级语言代码转换为机器码的同时,生成描述代码结构的元数据文件,以便运行时进行类型检查、反射等操作。这项技术的价值在于,它为静态分析和动态调试提供了至关重要的“地图”,尤其在游戏安全、漏洞挖掘和兼容性分析等场景中不可或缺。当面对Unity游戏常见的Il2Cpp元数据文件(如global-metadata.dat)被加密、裁剪或损坏时,逆向工程师需要运用一系列高级技巧进行修复。本文聚焦于**Il2

chaoyv 298

rk3576 点亮 LCD(mipi)

瑞芯微 RK3576 是一款面向中高端 AIoT 市场的 SoC,其 MIPI DSI (Display Serial Interface) 接口在性能和灵活性上相比前代(如 RK3399/RK3568)有显著提升,特别是在物理层协议的支持上更加现代化。相比RK3399 RK3568的mipi 接口少了 8lane,但是RK3576 MIPI DSI 增加更低功耗的 C-PHY。

weixin_35723192的博客 364

开发代码保护—ARM平台代码保护之虚拟化

背景:现在由于手机APP安全性缺乏导致用户敏感数据泄露的例子越来越多,尤其涉及经济金融、电商支付、手游类的案例居多,相关APP开发者应该从开发阶段到运营阶段都关注APP安全防护问题,无论是漏洞还是病毒等等。今日在此分享一个与App安全防护的技术 —— 代码保护之虚拟化。 1.1什么是代码虚拟化?   我们知道程序的执行,是依靠CPU对于符合规范的指令集的解析处理。如果将原指令集通过自...

Terreau的博客 491

第1课:开篇扫盲——OpenClaw是什么?能帮你解决什么问题?(入门必看)

核心目标:学会安装、卸载、管理OpenClaw技能,自定义AI代理的性格与权限,让AI贴合自己的使用习惯。核心内容技能市场详解:ClawHub市场核心技能分类(办公、学习、开发、生活),热门技能推荐(web-search、文件处理、邮件管理)[superscript:3][superscript:4]。技能安装与卸载:终端命令实操(openclaw skill install/uninstall),技能更新与版本管理[superscript:3]。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1756

Tiktok/抖音旋转验证码

主要记录一下旋转验证码的逆向思路

记录一些web逆向的过程 5971

【代码安全】ARM平台代码保护之虚拟化

简介: 代码的虚拟化即不直接通过CPU而是通过虚拟机来执行虚拟指令。代码虚拟化能有效防止逆向分析,可大大地增加了代码分析的难度和所需要的时间,若配合混淆等手段,对于动静态分析有着较强的防御能力。背景:现在由于手机APP安全性缺乏导致用户敏感数据泄露的例子越来越多,APP开发者应该从开发阶段到运营阶段都关注APP安全防护问题,无论是漏洞还是病毒等等。今日分享一个与...

weixin_33676492的博客 227

Microsoft Bitlocker企业级管理部署方案

BitLocker是Windows 10以及更高版本中内置的磁盘加密工具,是一种可靠的数据保护机制,可以保护计算机上的敏感数据不被未经授权的人访问。BitLocker的工作原理是将整个系统卷或其他数据卷加密的同时,向某个可信软件或硬件模块请求密钥解密数据。BitLocker最大的好处在于其内置于Windows系统,所以用户无需安装其他软件或购买额外的许可证或硬件设备。本文将介绍Microsoft BitLocker企业级管理部署方案,包括:BitLocker部署前的准备工作。

xueyunshengling的博客 2075

ARM平台代码保护之虚拟化

什么是代码虚拟化? 我们知道程序的执行,是依靠CPU对于符合规范的指令集的解析处理。如果将原指令集通过自定义规范进行变形处理,生成新的指令集(称之为虚拟指令集),CPU将无法识别虚拟指令。此时若配合能够解析虚拟指令集的解释器(称之为虚拟机),就可以达到不直接通过CPU而是通过虚拟机来执行虚拟指...

155

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

CTF逆向工程入门:从babyRe实战解析逆向分析核心流程与工具

逆向工程是软件安全领域的核心技术,指通过分析程序的二进制代码,理解其内部逻辑与实现原理。其核心价值在于漏洞挖掘、恶意代码分析、软件兼容性研究及知识产权保护。在CTF竞赛与安全研究中,逆向工程常用于分析算法逻辑、破解验证机制及发现潜在漏洞。本文以CTF中经典的babyRe题目为例,结合IDA Pro、Ghidra等工具,详细拆解逆向分析的标准流程:从信息收集、静态分析到动态调试,最终通过Python脚本与Z3求解器还原算法并获取flag。通过掌握汇编指令、控制流分析与加壳脱壳等技能,读者可系统提升软件逆向能力

weixin_34129696的博客 490

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

软件逆向工程入门:从黑盒分析到实战破解

软件逆向工程是一种通过分析已编译程序来理解其内部工作原理的技术方法,其核心在于将二进制代码这一“黑盒”转化为可理解的逻辑结构。这一过程主要依赖静态分析与动态分析两大技术路径:静态分析通过反汇编器(如Ghidra、IDA Pro)在不运行程序的情况下解析其代码结构与控制流;动态分析则借助调试器(如x64dbg、OllyDbg)在程序运行时监控其内存变化、API调用等行为。动静态结合的分析方法不仅能帮助开发者调试无源码的第三方库、进行安全漏洞挖掘,还能应用于软件兼容性研究、协议分析等工程实践场景。掌握逆向工程的

weixin_33674976的博客 425

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: Mac上逆向app步骤
下一篇: 红米真机不能调试解决方法
boxertan
博客等级 码龄12年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值