UIKit-Realm数据库的使用
前言
在了解Realm之前,建议了解一下使用文档
了解一下Object、Results、List、LinkingObjects的概念
从Realm到UnRealm
在Realm中存储对象,都需要是class类型(来满足Realm的即时更改,我们在基础课中学习过class是引用传递)
属性支持:Bool、Int、Double、Float、String、Date和Data,由于Data的特殊性,我们可以利用Data来存储各种特殊的类型例如Image、Color、Struct等等
Realm的基础使用可以参考这篇文章:https://juejin.im/post/6844904117442215944
更加深入一些:https://juejin.im/post/6844904117446377480#heading-60
but!这似乎太过麻烦了,为了一个对象我们需要实现一个Class并且加上复杂的init方法以及难以维护(代码量大)的属性设定。
于是可以使用UnRealm这个库:https://github.com/arturdev/Unrealm
看看简介,Awesome
只要让你的 ...
UIKit-实现搜索框的自定义
我采用的是UISeachController
有以下几样自定义了
取消按钮
1UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).title = "取消"
背景颜色
1UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .white
文本颜色
12UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange]//UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = .orange // 不起作用
P ...
SwiftUI-CoreData中使用NSPredicate过滤
在利用CoreData来存储数据的时候,如果需要过滤出我们需要的结果怎么办呢?
NSPredicate
1@interface NSPredicate : NSObject
where to use
1@FetchRequest(entity: , sortDescriptors: , predicate: , animation: )
Usage
init
12NSPredicate(format: "universe == 'Star'"))NSPredicate(format: "universe == %@", "Star"))
%@是占位符
Comparison
12grade == "7"firstName like "Shaffiq"
==和like关键字都可以,此外还有<或>
Involve
12"universe IN %@", ["Aliens", "Firefly", &q ...
nmap 基本用法
nmap ip 进行Regular Scan
nmap -p 21,22,80 ip 对这几个端口进行扫描
nmap -sT ip 进行全连接扫描
nmap -sS ip 对目标主机进行半开连接扫描
nmap -sV ip 显示banner信息
nmap -oX 1.xml ip 结果输出到1.xml中
OD OEP 常见脱壳方法
常见脱壳方法
预备知识
1.PUSHAD (压栈) 代表程序的入口点,
2.POPAD (出栈) 代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近
3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
除了单步调试都选分析代码是比较好
方法一:单步跟踪法
用OD载入,点“不分析代码!”
单步向下跟踪F8,实现向下的跳。也就是说向上的跳不让其实现!(通过F4)
遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)
绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP
在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN的一般很快就会到程序的OEP。
Btw:在有些壳无法向下跟踪的时候,我们可以在附近找 ...
实验平台逆向知识
汇编基础知识
平常好像也不会在意EAX~RDX的用处,记一下总没有错
符号标志位以及标志位判断
脱壳篇
见下一篇
按钮事件
前三个都是右键查找->二进制字串,VC++查找->命令
BC++&Delphi
174 0E 8B D3 8B 83 ?? ?? ?? ?? FF 93 ?? ?? ?? ??
VB
181 6C 24
易语言
PEID分辨的时候会显示为VC6程序,所以进去先搜索FF 25看是不是易语言写的
1FF 55 FC 5F 5E
VC++
1sub eax, 0a
初级破解
跳过登录
查找相关字符串,将跳到False的条件NOP,右键Nop的地方,复制到可执行文件->选择,在新窗口右键,保存到文件,重新打开发现直接success
获取注册码
查找相关字符串
找到关键Call(用来判断是否正确),下断点,F7步进,之后慢慢找到注册码
跳转破解
利用密码不对往上面找,看到上面一行的向右,点一下根据连线找到跳转语句,打断点
运行发现就是这的原因,空格改变汇编语句
更改为jmp(原来是je的条件跳转),结束。
修改关键CALL的返回值 ...
Swift中的字符串下标
引子
前几天在项目中需要截取字符串,却发现普适的语法在Swift里不适用
看到提示说明我们需要使用String.Index的类型的变量
去文档里看看下标可以接收单个Index,...和..<三种
果然是可以的
那么我们可以扩充下标方法来让我们更舒服的访问字符串,我这里返回值为可选性,以便不会越界
12345678910111213141516171819202122232425extension String { subscript (i: Int) -> Character? { guard i < self.count else { return nil } return self[self.index(self.startIndex, offsetBy: i)] } subscript (r: Range<Int>) -> String? { guard (r.lower ...
RxSwift从入门到放弃
引子
现在主要开发工作还是在UIKit上,由于RxSwift的简介性,还是学一学这个优秀的响应式的开发模式。
先来看一个例子
12345678910111213141516171819202122232425262728293031323334353637383940414243import UIKitimport RxSwiftimport RxCocoaclass LearnRxSwift: UIViewController { struct Music { let name: String let singer: String } var MusicList = Observable.just([ Music(name: "无条件", singer: "陈奕迅"), Music(name: "你曾是少年", singer: "S.H.E"), Music(name: "从前的 ...
Vscode coderunner 插件自定义编译语句
最近在学习C++ STL时用到Stack和Vector的时候编译器报错了。。。没有支持C++11的语法
版本是clang11理应是没有问题的,Xcode的Command Line Tool也能顺利编译,说明环境是没有问题的。。但是找了一会也没找到什么解决方案,偶然在Debug时竟然顺利编译了,查看一下Task.json
嗯。。。加上-std=c++11试试
在setting里单独为C++配置
1234"code-runner.executorMap": { "cpp": "cd $dir && g++ -std=c++2a $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", }
实际上这里standard还有几种写法,更新了不少,所以根据需要改成c++2a也是可以的
但是即便如此auto correct还是有点问题,暂不知道如何修复
C++-STL-Vector and Stack
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。
C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。
为方便,以下省略
1234#include <iostream>#include <stack>#include <iostream>using namespace std;
Vector
初始化
vector有许多初始化方式
12345678vector<int> v1;// 仅声明, 没有分配空间v1.reserve(20); // 当容量<=20时, 扩到20, 大于不做改变vector<int> v2 (20); // 20个为0的元素vector<int> ...