- 博客(183)
- 收藏
- 关注
原创 PE文件
2.CPU的某些指令是需要使用绝对地址的,比如取全局变量的地址,传递函数的地址编译以后的汇编指令中肯定需要用到绝对地址而不是相对映象头的偏移,因此PE文件会建议操作系统将其加载到某个内存地址(这个叫基地址),编译器便根据这个地址求出代码中一些全局变量和函数的地址,并将这些地址用到对应的指令中。第三个是一个可选的结构,实际上IMAGE_FILE_HEADER结构不足以定义PE文件属性,因此可选映像头中定义了更多的数据,包括加载到内存中的PE文件的基地址(映象),导入表,导出表等。
2024-11-26 14:03:22
235
原创 漏洞
当输入的密码为8位时,结果不正确,因为字符串末尾会有一个结束符00也会存储到内存里,所以实际占9位。原本存放返回值1的位置被覆盖成了0,所以最终结果会有偏差。一般函数执行完会调用jmp esp指令,所以只需要找到这条指令的位置,就可以在执行jmp之后,把下面的内容进行植入shellcode。发现如果字符串过长,导致返回值被淹没了,这样会导致程序运行崩溃。可以利用漏洞,把返回值直接进行修改。以jmp esp 为跳板的shellcode(栈溢出漏洞)确定位置(找到jmp esp)写shellcode。
2024-11-25 17:57:49
197
原创 逆向破解识别基础
如果想实现不论值是多少都输出false,可以修改跳转,把汇编的jnz指令改为jmp实现任何条件跳转,或者可以改cmp的值,使得输出的结果是我们的预期。如果main函数中有字符串或者调用函数等一些唯一标识,可以通过搜寻这些标识找到main函数。因为main函数需要三个参数,所以遇到三个参数加一个调用,那么可能是main函数。方法二:(通过修改push的地址)(使用OllyDbg软件)方法一:(直接在内存中改)破解密码的方法(控制台)
2024-11-24 15:13:03
265
原创 汇编语言基础
mov eax,5 把5这个值放到eax寄存器里面,add eax,6 将6与eax里的值相加并将结果放到eax里。INVOKE是伪指令,可以避免使用完整的汇编指令,简化代码。不能把大的数据mov到小的存储空间中(mov reg16 mem32是不合法的)因为DWORD类型占4个字节,所以esi*4,取到var的4这个元素。16位乘法(bx,ax),乘法高位结果放到edx里。rep指的是循环执行,由ecx决定次数,类似loop。uses是伪指令,后面跟上函数的参数。if是伪指令,.endif是结尾。
2024-11-23 18:12:05
417
原创 WorkManager
WorkManager提供了更多的高级功能和更好的兼容性,而Service则更适合执行简单的后台任务。WorkManager提供了许多高级功能,例如链式任务、延迟任务、周期性任务和灵活的重试策略等,而Service的功能相对较少。WorkManager可以在不同版本的Android系统上提供一致的行为,而Service的行为可能因Android版本而异。WorkManager可以根据设备的电池和网络状态自动调整任务执行时间,而Service可能会影响设备的电池寿命和网络使用。1.定义一个后台任务。
2024-05-22 11:26:46
176
原创 Room
dao层的目的是覆盖所有业务需求,使得用户不必与底层数据库打交道。定义Entity(实体类)定义Entity(实体类)定义Database。
2024-05-22 10:32:35
135
原创 ViewModel
它使用了ViewModelProvider和MainViewModelFactory类,用于创建MainViewModel的实例,并传入countReserved参数,用于初始化MainViewModel中的count属性。这样,我们就可以在Activity中使用viewModel变量来访问MainViewModel中的数据和方法。ViewModel的作用是帮助我们管理UI相关的数据和业务逻辑,实现数据的存储、共享、隔离和生命周期管理,从而提高应用程序的可维护性和可扩展性。传参给viewmodel。
2024-05-21 17:56:48
226
原创 下拉刷新
当用户下拉SwipeRefreshLayout时,将会触发下拉刷新监听器中的refreshFruits()方法。refreshFruits()方法是一个私有方法,用于刷新水果列表。在该方法中,我们使用了一个线程来模拟网络请求的延迟,然后在主线程中更新水果列表,并通知适配器数据已经发生变化。最后,我们还将SwipeRefreshLayout的刷新状态设置为false,表示刷新已经完成。SwipeRefreshLayout里面可以嵌套一个控件,在里面这个控件下滑时,会触发刷新的机制。
2024-05-21 14:54:51
201
原创 可交互提示Snackbar
make()方法接受三个参数:第一个参数是一个View对象,表示Snackbar要显示在哪个视图上;第二个参数是Snackbar要显示的文本消息;第三个参数是Snackbar要显示的持续时间,可以是LENGTH_SHORT或LENGTH_LONG。
2024-05-21 14:29:15
592
原创 滑动菜单栏
drawerlayout是菜单栏的主体,一般配合NavigationView使用,实现好看的UI界面。drawerlayout的第一个布局是主界面的布局。第二个是打开菜单栏后的菜单栏的布局。此处直接由NavigationView替换即可。group表示item的选项属于group组内,并且设置了group里面的选项为单选。菜单栏由两部分组成,头部和菜单。上面已经实现了菜单。新建menu布局,表示菜单栏的选项。
2024-05-21 14:20:43
356
原创 Service
通常用于执行与应用程序交互不直接相关的任务。在单独的工作线程中运行,无需手动管理线程。需要手动管理线程和生命周期,而。可以与应用程序的其他组件(如。与Activity通信。
2024-05-20 14:33:42
642
原创 线程
onPostExecute() : doInBackground() 执行完毕后再执行的方法 ,这个字段是一个整数,可以用来区分不同类型的消息。onPreExecute() : 在 doInBackground() 执行前先执行的方法 ,doInBackground() : 核心方法 , 执行异步任务 , 该方法在。类是一个轻量级的数据结构,用于在线程之间传递数据和消息。是一个用于执行后台任务并更新UI的辅助类。在doInBackground中执行耗时任务,由子线程执行。字段的值来执行相应的操作。
2024-05-17 18:13:57
426
原创 安卓开发——多媒体
易于传输和共享:使用Bitmap对象可以轻松地在应用程序、服务和设备之间传输和共享图像。例如,我们可以将Bitmap对象发送给其他应用程序或服务,以便它们可以访问和处理图像。内存管理:Bitmap对象可以直接在内存中操作图像数据,这使得在处理图像时可以更快地访问和修改数据。这意味着我们可以在不同的Android设备和版本上使用相同的Bitmap对象来处理图像。便于操作:Bitmap对象提供了丰富的API,可以方便地对图像进行各种操作,如缩放、裁剪、旋转、滤镜等。音频和视频播放的方法有所不同。
2024-05-17 15:46:34
509
原创 持久化技术
MyDatabaseHelper继承自SQLiteOpenHelper,需要重写onCreate和onUpgrade方法。onUpgrade方法用于升级数据库。当传入的参数大于上一个版本的数据时就会调用。update后面两个参数是表示where name = The Da Vinci Code。添加一个按钮,点击后将数据提交。使用SQL操作数据库。
2024-05-16 15:12:19
723
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人