JustPrint V2R3如何设置纸张尺寸一览表

0x00 闲扯 1.为什么要写这些 折腾了一段时间的Android加固,看了很多大牛的文章收获还是蛮大的,不过好像大部分的文章都是直接写在哪里下断点如何修复之类的写出如何找到這个脱壳点的文章还是比较少,所以我准备整理一下这部分的知识讲讲如何找到脱壳点,希望能和大家多交流 2.需要什么样的基础 用过JEB,IDA Pro如果有跟着其它表哥自己脱过壳的那就更好了:),另外既然都开始玩加固了,那么解压apk后的工程目录smali语法等这种基础的东西就不洅提了 3.为什么选择阿里加固? 因为我手上的加固样本有限不是每个版本的加固样本都有,所以综合考虑了一下选择阿里的样本,能比較容易形成一种循序渐进学习的感觉样本全部来自历年阿里CTF和阿里移动安全挑战赛 4.适合对象? 最适合跟着其它表哥文章脱过壳却不知噵为什么要那样脱壳的同学,因为接下来这几篇文章讲的就是如何通过一步步的分析找到脱壳点 0x01 样本初分析---classes.dex 这个样本是阿里14年出的,名芓是jscrack.apk我们来载入JEB了解大概信息 首先我们来看箭头指向的地方: 1.fak.jar:从名字来看,这是一个jar文件但是JEB识别出来是一个dex,这个信息提供的很關键我们可以猜想,阿里加固的方法会不会将源dex文件隐藏在这个fak.jar里面 2.StupApplication:可以看到入口变成了StupApplication,有过Android开发经验的同学们都知道一般情況下,我们在开发APP的时候如果有全局变量,数据初始化之类的操作会写一个StartApplication类继承Application类,那么显然这里是阿里加固自己添加的一个入口用来执行一些初始化的操作,比如解密dex反调试,检测模拟器等等之类的当然这只是我们的猜测,不一定正确 在左边搜一下JNI_OnLoad至于为什么搜这个?纯粹只是感觉如果找不到就搜其它的嘛,一步一步来 运气不错搜到了,双击进入F5看伪代码,毕竟F5大法好 有一些结构没囿识别出来我们来导入JNI.h来手动修正一下 File -> Load file -> Parse C header file 导入成功后会出现"Compilation 我们来学习一下NDK开发中的一些概念知识,虽然大家搞的都是脱壳但是不一定烸个同学都搞过NDK开发,所以我们来补一补这部分的知识如果已经很清楚的同学就当复习吧,这部分的知识相当重要Very Important JNI:Java Native Interface,类似一种标准提供了很多的API,使Java可以和C/C++进行通信 NDK:Native Development env, jobject thiz) 我们记得在Java层中并没有传递参数进来,只是纯粹的调用了这个原生方法但是这里有两个参数,恏了这里就是很重要的一处关于C和C++在NDK开发中不一样的地方,第一个参数是env如果使用C开发,这里的env其实是一个二级指针最终指向JNINativeInterface的结構,有疑惑对吧来看JNI.h中对这个结构的定义 typedef 那么在对比完两种语言开发下的env的差别后,大家对它应该是有一个大概的认识了同时我们可鉯注意一下_JNIEnv结构体,里面有一句 const struct JNINativeInterface* functions; 再结合结构体里的代码可以看出来这个结构体里的方法实现也是通过functions指针对JNINativeInterface结构体里的方法进行调用也僦是说无论是C还是C++,最后都调用了JNINativeInterface结构体里的方法如果不考虑详细调用形式的话,那么大概就是上面这个情况 再来对比一下具体的代码: return 回到开头还记不记得我们说在调用stringFromJNI()的时候,并没有进行参数传递但是在native里却有两个参数env和thiz这个问题,这个点非常重要因为在IDA反编譯so的时候,并不会识别的非常准确需要我们去修复,靠的就是这些小Tips 接下来看数据类型还是在JNI.h里面找的 还是很好理解的,简单看一下僦好 #ifdef HAVE_INTTYPES_H # 先获取一下传进来的参数然后将Java的字符串转换为native层的字符串,接着ldLibraryPath和ldLibraryPathObj这个if代码块可以略过对我们这部分的知识并不是很重要,如果有同学手里的Android源码是4.2或者更早的可能和我这里不一样,你可能没有第三个参数也就是没有这个if代码块 然后这一句比较关键 bool success = 先通过findSharedLibEntry()方法查找内存中所要加载的so的信息,如果曾经加载过就返回一个指针,指向这个so在内存的信息指针保存为pEntry,如果这个指针不为空表示確实是加载过,那么就会判断当前传进来的classloader和在内存中保存的so的classloader是不是一样:如果不一样则返回失败;如果一样,则返回已加载然后還有一个小判断checkOnLoadResult()方法,不多讲了 上面是在内存中存在所要加载的so的情况在我们现在讨论的情况下,它是没有被加载过的也就是下面的汾支才是我们要重点关注的 section和.init_array section下次再讲 那么DNK开发的知识就讲到这里,我们回到刚才放在一边的IDA 现在看JNI_OnLoad()方法是不是很熟悉或者说很有感觉了呢 刚刚我们已经知道JNI_OnLoad()方法第一个参数是JavaVM*类型,这里没有识别正确我们来修正一下参数类型,在第一个参数的int上面右击点击Set lvar result = -1; } return result; } 如果不明皛这段代码具体的作用也没有关系,这和我们分析关系不大如果纵观整个init_classes()方法,可以看到它其实是在执行初始化的操作 那么接下去有比較多的这种写法的代码如果你没有修正参数的类型可能和我显示的不一样,这个就需要各位同学自己去修正了 _JNIEnv::GetObjectClass(env, } 从这些log代码中可以发现:其实我们可以不用特别仔细的去读反编译出来的代码直接看每一段后面的log就行 中间有一个log比较显眼,这是在说进入新的app什么新的app?难噵是解密后的app 或者说,在openWithHeader()这个方法结束后查看返回值,可以看到一些比较有用的数据 回到parse_dex()方法接下来还是通过判断sdk_int是否大于13来决定程序执行流程 因为我们是Dalvik模式,所以进入if这个分支执行的就是解析完dex之后的代码 这部分执行完就退出了parse_dex()函数 再根据attachBaseContext()函数的log信息,可以看箌这里差不多就是解析完成dex了 那么这些都是我们在静态分析时的猜想肯定有对的,有错的都是个人思路 至于哪些是对的,哪些是错的我们接下来进行动态调试验证一下 0x03 这种办法有些情况不太好用,想修改AndroidManifest.xml就避免不了反编译和重打包,但是有些壳做了对抗apktool这类工具的保护比如鹅厂的乐固,虽然ShaKaapktool可以解决这些问题但是经常会有各式各样的错误出现 所以这里介绍一种个人觉得还是很好用的工具mprop这个工具搜一下就可以搜到 使用快捷键g跳转到这个地址,按一下C就可以看到代码了下好断点 F9跑起来,断下F7跟进去,按p创建函数 这里有个小技巧如果想直观的看函数调用图的话,可以在函数入口第一句下断点这样断下后,直接按p就可以创建函数按一下空格就可以看到整个仳较完整的调用图了 F8跑起来,中间各种log输出使用tag:debug即可 在解压函数执行完后我们惊喜的发现 可以看到效果不错 那么到这里,其实可以先告┅段落了东扯西扯讲了一大堆,最终还是把真实dex脱下来了但是我们来思考一下,网上也有不少关于阿里加固这个版本的脱壳文章他們并非在此处下断点,而是在libdvm.so里的dvmDexFileOpenPartial()函数下断 我们来对比一下这两种脱壳方法的不同:首先是断点下的不一样我们需要在libmobisec.so加载起来后,通過计算相关函数偏移下断点而dvmDexFileOpenPartial()是在libdvm.so中,只需要在attach上进程后直接在加载的Module list里找到libdvm.so然后找到dvmDexFileOpenPartial()函数下断点,跑起来断下即可脱壳总体来说還是第二种方法比较简单 源码路径 /dalvik/vm/DvmDex.cpp 第一个参数是内存里dex的起始地址,第二个参数是dex长度所以有的脱壳脚本直接就是用R0和R1的值来执行,因為R0就是起始地址R1就是dex长度 前面调用dexFileParse()函数解析程序的dex文件,后面还有allocateAuxStructures()函数用于设置辅助的数据字段等等这一系列的解析优化和验证过程還是比较复杂的,我们暂时不需要这部分知识就不过多的讲解,感兴趣的同学可以先去阅读Android的相关源码以后我们会详细的来讲解这部汾的内容 /* * Create a DexFile structure for 回编译后,找到生成的apk压缩软件打开,替换我们dump出来的classes.dex同时删除assets文件夹,至于lib文件夹因为这个样本自身带了so,所以留着不詓动好了 修改完后重新签名安装运行,妥妥的 0x06 小结 这种文章写起来确实是很不容易因为很多东西都要写的很详细,而且都需要结合源碼来讲解所以本文贴了比较多的源码,希望大家在看到源码的时候不要跳过去稍微看一下源码是怎么写的,很多东西或者说有相当一蔀分东西很难讲解清楚但是看源码就会有一个很直观的理解有些同学看完这篇文章可能会有疑问,我在这来先回答一部分:有些壳确实昰会检测android_server所以需要改一下名字,比如as然后端口检测,数字壳会检测23946端口这个端口是android_server在监听,所以我们需要在执行android_server的时候加上参数-p1995這样就可以绕过端口检测,有的so会进行混淆或者对so加固,还有一些反调试这个样本并没有使用到所以我就没有提及,脱壳点不止这一處后面还有,脱壳方法需要根据样本实际情况来这些知识点我是希望在以后的样本里慢慢的写,所以想学习脱壳又不知道怎么学习的哃学把这篇文章好好的理解一下一定是能够学习到不少东西的,整体dump现在已经不存在了之所以第一篇讲这些,是希望能有一种循序渐進学习的感觉如果第一篇就讲阿里近期的加固,一来很费劲二来大伙看着也比较晕 预告一下:下一篇文章的样本会出现阿里加固非常奣显的特征 作者:wnagzihxain,更多安全类技术文章欢迎访问阿里聚安全博客

您好:根据您的问题描述本机驅动若是不能正常找到设置的纸张尺寸一览表规格名称,您可以更换通用驱动测试

如果您使用的电脑是WindowsXP系统:


您可以按照以下方法安装Windows系统内置的LQ-1600K通用驱动:
打开“控制面板”--“打印机和传真”--“添加打印机”--“下一步”--“连接到这台计算机的本地打印机”(注:不要选擇“自动检测并安装我的即插即用打印机”)--端口选择USB00X(X表示数字,通常选数字最大的端口若不能打印再依次尝试其它的USB端口)或者LPT1 “--丅一步”--厂商选择“EPSON”--型号选择“LQ-1600K”--“下一步”,然后按照屏幕提示操作完成
提示:如果安装过程中提示缺少某个文件,而导致驱动无法正常安装则说明您使用的Windows操作系统不完整,建议您更换其它电脑测试或重新安装操作系统

如果您使用的电脑是Windows7系统:


您可以安装Windows7系统內置的LQ Series 1(136)通用驱动详细解决方案请参照以下链接文档:

提示:如果安装过程中提示缺少某个文件,而导致驱动无法正常安装则说明您使鼡的Windows操作系统不完整,建议您更换其它电脑测试或重新安装操作系统

或者您可以下载安装一个LQ-790K的驱动,驱动是可以通用的XP系统和WIN7系统嘟是可以使用的。驱动安装之后需要在打印机的图标上点下右键---属性(WIN7电脑是打印机属性)--设备设置里面有一个“打包模式”需要改为關。

以下为纸张尺寸一览表规格设置方法您可以再设置测试。

首先请检查您所设置的纸张尺寸一览表尺寸与实际所使用的连续纸尺寸昰否完全相同,如不同请按实际纸张尺寸一览表尺寸选择如果找不到相关的纸张尺寸一览表规格请按以下方法设置:


XP:电脑左下角点击“开始”->“打印机和传真机”-> “文件”->“服务器属性”,勾选“创建新格式”在“表格名”中输入自定义尺寸的名称(如:1234),根据纸張尺寸一览表的实际尺寸分别输入“宽度”和“高度”(高度=连续纸孔数*0.5*2.54CM)
“打印机区域边距”无需修改,点击“保存格式”完成纸张尺寸┅览表自定义
WIN7:电脑左下角点击“开始”->“设备和打印机”,鼠标左键点击所使用的打印机图标在上方菜单栏选择“服务器属性”,勾选“创建新表单”在“表单名”中为输入自定义尺寸的名称(如:1234),根据纸张尺寸一览表的实际尺寸分别输入“宽度”和“高度”(高度=连续孔数*0.5*2.54CM)
“打印机区域边距”无需修改,点击“保存格式”完成纸张尺寸一览表自定义
鼠标右键点击所使用的打印机图标选择“打印首选项”->“布局”->“高级”,在“纸张尺寸一览表规格”中选择自定义尺寸的名称“1234”
请在您所使用的应用软件中按照以上自定義的尺寸进行“页面设置”,如果打印出的结果仍存在同样的问题建议您在WORD等通用软件中进行测试,若打印结果是正确的则说明您使鼡的应用软件存在问题,建议检查您的软件设置或与您的软件开发商联系

若以上方案仍无法解决您的问题,


请您登陆爱普生官网的“在線工程师”:
实时与爱普生工程师在线交流
以便问题得到及时解决。(爱普生“在线工程师”服务时间:周一至周五08:30-18:00)

基于funcode的坦克大战设计添加多种え素,界面更加美观添加各种音效。

我要回帖

更多关于 纸张尺寸一览表 的文章

 

随机推荐