自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (4)
  • 收藏
  • 关注

原创 讲清楚charles抓包原理

charles抓包原理,一篇文章搞定charles抓包原理。

2022-07-26 17:10:22 236 2

原创 C语言内存精讲

C语言内存精讲

2022-06-02 17:42:33 768

原创 笔记 指针&MachO文件

逆向课程随堂笔记指针&MachO文件##指针指针自增、自减的结果,其实就是指针指向的数据类型宽度决定的!指针加上或减去一个整数的结果,其实就是指针指向的数据类型宽度决定的!指针求差,得到的结果是整形,其结果和指针指向的数据类型宽度有关!这也就是指针的特点! 它的运算单位 是数据类型的宽度!关于汇编,重点.只能是带大家入门.##逆向原理动态调试 通过界面调试Cycript\Xcode LLDB!静态分析 利用我们之前学习的汇编代码,分析三方APP的源码!代码注入 注入的其实是

2022-01-14 10:22:50 126

原创 笔记 汇编 循环&选择

逆向课程随堂笔记004 循环&选择##cmp(Compare)比较指令   CMP 把一个寄存器的内容和另一个寄存器的内容或立即数进行比较。但不存储结果,只是正确的更改标志。   一般CMP做完判断后会进行跳转,后面通常会跟上B指令!BL 标号:跳转到标号处执行B.GT 标号:比较结果是大于(greater than),执行标号,否则不跳转B.GE 标号:比较结果是大于等于(greater than or equal to),执行标号,否则不跳转B.EQ 标号:比较结果是等于

2022-01-14 10:22:12 164

原创 笔记 状态寄存器

逆向课程随堂笔记#003-状态寄存器   CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同).这种寄存器在ARM中,被称为状态寄存器就是CPSR(current program status register)寄存器CPSR和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义.而CPSR寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息.注:CPSR寄存器是32位的CPSR的低8位(包括I、F、T和M[4:0])称为

2022-01-14 10:21:34 595

原创 笔记 函数本质

逆向课程随堂笔记002–函数本质##关于CPU的补充####寄存器CPU除了有控制器、运算器还有寄存器。其中寄存器的作用就是进行数据的临时存储。CPU的运算速度是非常快的,为了性能CPU在内部开辟一小块临时存储区域,并在进行运算时先将数据从内存复制到这一小块临时存储区域中,运算时就在这一小快临时存储区域内进行。我们称这一小块临时存储区域为寄存器。对于arm64系的CPU来说, 如果寄存器以x开头则表明的是一个64位的寄存器,如果以w开头则表明是一个32位的寄存器,在系统中没有提供16位和8位

2022-01-14 10:21:05 70

原创 笔记 初识汇编

逆向课程随堂笔记001–初识汇编我们在学习逆向开发之前,我们要了解一个基本的逆向原理.首先我们是逆向iOS系统上面的APP.那么我们知道,一个APP安装在手机上面的可执行文件本质上是二进制文件.因为iPhone手机本质上执行的指令是二进制.是由手机上的CPU执行的.所以逆向开发是建立在分析二进制上面.所以今天我们接下来的课程从非常基础的东西开始讲解.汇编语言的发展机器语言由0和1组成的机器指令.加:0100 0000减:0100 1000乘:1111 0111 1110 0000除:

2022-01-14 10:20:32 150

原创 LLDB(Low Lever Debug)

LLDB

2022-01-14 10:18:56 60

原创 DNS劫持那些事

#原理DNS窃持就是通过修改客户机器的DNS服务器,将域名对应的ip地址修改成错误的,或者黑客的服务器ip。然后黑客服务器变成了所有客户请求的代理。HTTP协议下,客户和服务器的通讯在黑客服务器上完全可见。HTTPS协议下,黑客将客户机的HTTPS请求转成到黑客服务器的HTTP请求,然后黑客服务器再与目标服务器做正常的HTTPS通讯。这样同样客户和服务器的通讯在黑客服务器上完全可见。#如何防范在输入重要信息的时候注意检查浏览器的证书安全等级提示,现在的主流浏览器都有这个功能。拿chrom.

2022-01-14 10:16:38 287

原创 Mac下使用NASM进行汇编

PS: 别人写的,不允许转载,记录一下连接: 原帖在这里

2022-01-14 10:15:28 225

原创 汇编语言实现在80*25彩色字符模式下显示字符串

我写的mac pro上用DosBox能正常运行的代码:assume cs:codesg, ds:datasg, ss:stackdatasg segment db 'welcome to masm!' db 02h,24h,71hdatasg endsstack segment dw 8 dup(0)stack endscodesg segmentstart: mov ax,datasg mov ds,ax mov bx,0 ;字符的段内偏移 mov

2022-01-14 10:14:46 224

原创 Mac 上NASM安装

Mac 上NASM安装

2022-01-14 10:11:13 762

原创 Cocopods升级注意事项

升级ruby的时候如果报 Permission denied 错误。记得在命令前加sudo就行。sudo的作用:sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。升级完Cocoapods后,还要执行pod setup为什么要执行pod setup?所有的项目的 Podspec 文件都托管在

2022-01-12 11:38:52 233

原创 iOS开发小细节记录

#1. UILabel出现奇怪的边线今天出现一个问题,UILabel莫名其妙的出现了黑色的边线。网上查了一下,是因为frame值有小数造成的。#2. Swift在delegate中执行popToRootViewController, popToViewController 无效的问题具体原因就是delegate中的代码不在主线程执行,套上下面这个代码就OK DispatchQueue.main.async { self.navigationController?.popToR

2022-01-12 11:32:15 859

原创 iOS 中提供的 GCD 队列

#1. 主队列(main queue)主队列是串行队列。和其它串行队列一样,这个队列中的任务一次只能执行一个。然而,它能保证所有的任务都在主线程执行,而主线程是唯一可用于更新 UI 的线程。这个队列就是用于发生消息给 UIView 或发送通知的。#2. 全局调度队列(Global Dispatch Queues)全局调度队列是并发队列。目前的四个全局队列有着不同的优先级:background、low、default 以及 high。要知道,Apple 的 API 也会使用这些队列,所以你添加的任何任务

2022-01-12 11:31:11 1207

原创 GCD 队列类型

GCD 提供有 dispatch queues 来处理代码块,这些队列管理你提供给 GCD 的任务并用 FIFO 顺序执行这些任务。这就保证了第一个被添加到队列里的任务会是队列中第一个开始的任务,而第二个被添加的任务将第二个开始,如此直到队列的终点。所有的调度队列(dispatch queues)自身都是线程安全的,你能从多个线程并行的访问它们。当你了解了调度队列如何为你自己代码的不同部分提供线程安全后,GCD的优点就是显而易见的。关于这一点的关键是选择正确_类型_的调度队列和正确的_调度函数_来提交你的

2022-01-12 11:30:42 104

原创 GCD 常用方法

#1. dispatch_async 异步派发队列Demo:// 在全局并发队列中执行任务dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1 // to do some thing here // 完成任务后主队列中执行必须在主队列中执行的代码(比如:更新UI) dispatch_async(dispatch_get_main_queue(

2022-01-12 11:29:45 1358

原创 iOS 使用Zebra打印机打印标签

##1.先分享一个好用的工具:样式调整工具##2.常用指令理解^MUi 以英尺为度量单位^MUd 以dot为度量单位^CON 缓存字符大小 ^CON 是不缓存^PR4 打印速度^FTx,y 相对^LH的坐标 默认^LH0,0^GBw,h 打印方块,我们用来打印黑色边线^A 字大小和方向^FD 内容开始^FS 内容结束^BYw,r,h 条码宽度,长宽比,高度^BUo,h,f,g,e 条码方向,高度,是否打印条码值Y/N,是否在条码上边打印条码值

2022-01-12 11:26:02 1337

原创 C语言内存精讲

1. 一个程序在计算机中到底是如何运行的?2. 虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的?3. 虚拟地址空间以及编译模式4. C语言内存对齐,提高寻址效率5. 内存分页机制,完成虚拟地址的映射6. 分页机制究竟是如何实现的?7. MMU部件以及对内存权限的控制8. Linux下C语言程序的内存布局(内存模型)9. Windows下C语言程序的内存布局(内存模型)10. 用户模

2022-01-12 11:24:19 679

原创 Java注解

类型: @interface##作用为修饰者提供元数据注解本质/**Annotation接口源码*/public interface Annotation { boolean equals(Object obj); int hashCode(); Class<? extends Annotation> annotationType();}元注解:提供给注解使用的注解. @Retention. @Target. @Documented. @In

2022-01-12 11:23:10 72

原创 C语言头文件的编写(多文件编程)

1. 从extern关键字开始谈C语言多文件编程2. 那些被编译器隐藏了的过程3. 目标文件和可执行文件里面都有什么?4. 到底什么是链接,它起到了什么作用?5. 符号——链接的粘合剂6. 强符号和弱符号7. 强引用和弱引用8. C语言模块化编程中的头文件9. C语言标准库以及标准头文件10. 细说C语言头文件的路径11. 防止C语言头文件被重复包含12. C语言st

2022-01-12 11:22:07 992 1

iOS swift 路由组件实现源码

iOS swift 路由组件实现源码

2022-01-12

swift实现下拉刷新上拉加载源码

swift实现下拉刷新,上拉加载功能源码

2022-01-12

swift实现扫码功能源码

swift实现扫码,二维码生成功能源码

2022-01-12

C# IP定位代码实例

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text.RegularExpressions; namespace IpToEarean { public class IpGetter { #region /// <summary> /// 取得客户端真实IP。如果有代理则取第一个非内网地址 ,适用多层代理 /// </summary> public string IPAddress { get { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (result != null && result != String.Empty) { //可能有代理 if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式 result = null; else { if (result.IndexOf(",") != -1) { //有“,”,估计多个代理。取第一个不是内网的IP。 result = result.Replace(" ", "").Replace("'", ""); string[] temparyip = result.Split(",;".ToCharArray()); for (int i = 0; i < temparyip.Length; i++) { if (this.IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.") { return temparyip[i]; //找到不是内网的地址 } } } else if (this.IsIPAddress(result)) //代理即是IP格式 return result; else result = null; //代理中的内容 非IP,取IP } } string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (null == result || result == String.Empty) result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty) result = HttpContext.Current.Request.UserHostAddress; return result; } } #endregion /// <summary> /// 取得客户端真实IP。如果有代理则取第一个非内网地址 ,适用多层代理 /// </summary> /// <returns></returns> public string GetClientIp() { string result = String.Empty; result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (result != null && result != String.Empty) { //可能有代理 if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式 result = null; else { if (result.IndexOf(",") != -1) { //有“,”,估计多个代理。取第一个不是内网的IP。 result = result.Replace(" ", "").Replace("'", ""); string[] temparyip = result.Split(",;".ToCharArray()); for (int i = 0; i < temparyip.Length; i++) { if (this.IsIPAddress(temparyip[i]) && temparyip[i].Substring(0, 3) != "10." && temparyip[i].Substring(0, 7) != "192.168" && temparyip[i].Substring(0, 7) != "172.16.") { return temparyip[i]; //找到不是内网的地址 } } } else if (this.IsIPAddress(result)) //代理即是IP格式 return result; else result = null; //代理中的内容 非IP,取IP } } string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (null == result || result == String.Empty) result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty) result = HttpContext.Current.Request.UserHostAddress; return result; } /// <summary> /// 判断是否是IP地址格式 0.0.0.0 /// </summary> /// <param name="str1">待判断的IP地址</param> /// <returns>true or false</returns> public bool IsIPAddress(string ip) { if (ip == null || ip == string.Empty || ip.Length < 7 || ip.Length > 15) return false; string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$"; Regex regex = new Regex(regformat, RegexOptions.IgnoreCase); return regex.IsMatch(ip); } } }

2009-12-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除