コード例 #1
0
 def isEndOfArticle(self,article,articles):
     p = utils.convertToInt(utils.getDictValue(article, 'page'))
     nextPage=p+1
     for a in articles:
         page=utils.getDictValue(a, 'page')
         page = utils.convertToInt(page)
         if page == nextPage:
             return True
     return False
コード例 #2
0
 def getArticle(self, articles, filename):
     item=None
     articles = self.getArticles(articles, filename)
     filePage=0
     closest=0
     close=0
     nearestMatchItem=0
     try:
         if "." in filename:
             filePage = self.extractPageNumberFromFilename(filename)
         
         #in case of a problem
         if filePage == 0:
             return item
         
         for a in articles:
             page=utils.convertToInt(utils.getDictValue(a, 'page'))
             close = filePage - int(page)
             if close >= 0:
                 if closest > close or nearestMatchItem == 0:
                         item = a
                         nearestMatchItem=page
                         closest=close
     except Exception as e:
         print("Error happened!!!!!!!!!!!!!!! "+filename)
         print(e)
     
     return item
コード例 #3
0
ファイル: shortcmds.py プロジェクト: onsucs/xia0LLDB
def mem_dump(debugger, command, exe_ctx, result, internal_dict):
    command_args = shlex.split(command, posix=False)

    _ = exe_ctx.target
    _ = exe_ctx.thread

    if len(command_args) != 3:
        utils.ELOG("[usage] mem_dump outFile addr size")
        return

    outfile = command_args[0]
    start_addr = utils.convertToInt(command_args[1])
    size = eval(command_args[2])

    if not start_addr:
        utils.ELOG("params format error")
        return

    utils.ILOG("default address will plus main image slide")
    slide = utils.get_image_slide(debugger, 0)
    start_addr = start_addr + slide

    cmd = "memory read --binary --outfile {} --count {} {}".format(
        outfile, size, start_addr)
    utils.ILOG("mem dump:{}".format(cmd))
    ret = utils.exe_cmd(debugger, cmd)

    result.AppendMessage(str(ret))
    return
コード例 #4
0
ファイル: shortcmds.py プロジェクト: onsucs/xia0LLDB
def mr(debugger, command, exe_ctx, result, internal_dict):
    command_args = shlex.split(command, posix=False)

    _ = exe_ctx.target
    _ = exe_ctx.thread

    if len(command_args) != 2:
        utils.ELOG("[usage] mr addr count")
        return

    start_addr = utils.convertToInt(command_args[0])
    size = eval(command_args[1])

    if not start_addr:
        utils.ELOG("params format error")
        return

    # utils.ILOG("default address will plus main image slide")
    # slide = utils.get_image_slide(debugger, 0)
    # start_addr = start_addr + slide

    cmd = "memory read  {} --count {}".format(start_addr, size)
    utils.ILOG("mem read:{}".format(cmd))
    ret = utils.exe_cmd(debugger, cmd)

    result.AppendMessage(str(ret))
    return
コード例 #5
0
ファイル: xobjc.py プロジェクト: ljh740/xia0LLDB
def objc_dump_ivars(debugger, obj_addr):
    command_script = '@import Foundation;NSObject* obj = (NSObject*)' + obj_addr + ';'
    command_script += r'''
    NSMutableString* retStr = [NSMutableString string];

    typedef struct objc_ivar *Ivar;

    Class clz = [obj class];
    unsigned int count = 0;
    Ivar *vars = (Ivar *)class_copyIvarList(clz, &count);

    for (int i=0; i<count; i++) {
        Ivar var = vars[i];
        long offset = (long)ivar_getOffset(var);
        NSString* varName = [NSString stringWithUTF8String:(const char *)ivar_getName(var)];
        NSString* varTypeStr = [NSString stringWithUTF8String:(const char *)ivar_getTypeEncoding(var)];

        //NSString* dumpStr = [NSString stringWithFormat:@"-> %@ %@; // %p -> %p", ParseTypeString(varTypeStr)[0], varName, varAddr, *varAddr];
        void** varAddr = (void**)((unsigned char *)(__bridge void *)obj + offset);
        
        [retStr appendString:varName];
        [retStr appendString:@","];
        [retStr appendString:varTypeStr];
        [retStr appendString:@","];
        [retStr appendString:(id)[@((long)varAddr) stringValue]];
        [retStr appendString:@"||"];
    }
    retStr
    '''
    retStr = utils.exe_script(debugger, command_script)
    arr = retStr.strip().split("||")

    retArr = []

    for item in arr:
        if len(item) <= 0:
            continue
        info = item.split(",")

        if len(info) != 3:
            continue

        retArr.append([info[0], info[1], hex(utils.convertToInt(info[2]))])

    return retArr
コード例 #6
0
ファイル: xobjc.py プロジェクト: ljh740/xia0LLDB
def xmethods(debugger, command, exe_ctx, result, internal_dict):
    def generate_option_parser():
        usage = "usage: xmethods"
        parser = optparse.OptionParser(usage=usage, prog="lookup")

        parser.add_option("-a",
                          "--address",
                          action="store",
                          default=None,
                          dest="address",
                          help="set a breakpoint at absolute address")

        return parser

    command_args = shlex.split(command, posix=False)
    parser = generate_option_parser()
    try:
        (options, args) = parser.parse_args(command_args)
    except:
        result.SetError(parser.usage)
        return

    _ = exe_ctx.target
    _ = exe_ctx.thread

    def is_address(args):
        if len(args) == 0:
            return False

        arg = args[0]
        if len(arg) == 0:
            return False

        ret = re.match('^0x[0-9a-fA-F]+$', arg)

        if not ret:
            return False
        return True

    clz = args[0]
    obj = clz
    if is_address(args):
        clz = objc_obj_name(debugger, args[0])

    ret = objc_dump_methods(debugger, clz)

    utils.ILOG("Dump methods for {}({})".format(obj, clz))
    # print(ret)

    for method in ret:
        if len(method) < 4:
            utils.ELOG("Error method!")
            break

        addr = hex(utils.convertToInt(method[2]))

        retType = method[3]
        retTypeList = objc_parse_typesign(method[3])

        if retTypeList and len(retTypeList) > 0:
            retType = retTypeList[0]

        selname = method[1]
        argCount = len(method) - 4

        if argCount > 0:
            global methodArgIdx

            arr = method[4:]
            methodArgIdx = 0

            def handler(reobj):
                global methodArgIdx
                r = reobj.group(0)

                argType = arr[methodArgIdx]
                argTypeList = objc_parse_typesign(argType)

                if argTypeList and len(argTypeList) > 0:
                    argType = argTypeList[0]

                r = r + "(" + argType + ")" + "a" + str(methodArgIdx) + " "
                methodArgIdx = methodArgIdx + 1
                return r

            selname = re.sub(":", handler, selname, flags=0)

        line = "\t{} ({}){};// {}".format(method[0], retType, selname, addr)

        print(line)

    # result.AppendMessage("command is still developing. please wait...\n")

    return parser
コード例 #7
0
	import readline
except ImportError:
	pass

import socket
import sys

from SimpleFTPClientInterpreter import SimpleFTPClientInterpreter
from utils import checkNumArgs, convertToInt, debugPrint
from utils import recvAll, recvFile, recvLine, sendStr,  sendFile


if __name__ == "__main__":
	checkNumArgs(3)
	hostName = sys.argv[1]
	port = convertToInt(sys.argv[2])
		
	try:
		hostIP = socket.gethostbyname(hostName)
		ctrlSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		ctrlSock.connect((hostIP, port))
	except socket.gaierror:
		print("CLIENT: Cannot resolve hostname \"{host}\"".format(host=hostName))
	except socket.error:
		print("CLIENT: Cannot connect to {host}:{port}".format(host=hostName, port=port))
	else:
		print("CLIENT: Connected to {host}:{port}.".format(host=hostName, port=port))
		print("Welcome to Peter's Simple File Transfer Client. Enter commands below, or HELP.")
		
		shell = SimpleFTPClientInterpreter(ctrlSock, (hostIP, port))
		while not shell.isFinished():
コード例 #8
0
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
################################################################################

"""This module (serv.py) provides the threading server. It can be invoked with
a desired port number as follows: 
 $ ./threadserv.py <port>"""


import sys
from libserver import threadingServer_listenForever
from utils import checkNumArgs, convertToInt
from SimpleFTPServerConnection import SimpleFTPServerConnectionHandler 


if __name__ == "__main__":
	checkNumArgs(2)
	servPort = convertToInt(sys.argv[1])
	threadingServer_listenForever(servPort, SimpleFTPServerConnectionHandler)
コード例 #9
0
ファイル: shortcmds.py プロジェクト: onsucs/xia0LLDB
def pblock(debugger, command, exe_ctx, result, internal_dict):
    command_args = shlex.split(command, posix=False)

    _ = exe_ctx.target
    _ = exe_ctx.thread

    block_addr_raw = command_args[0]
    block_addr = utils.convertToInt(block_addr_raw)
    if block_addr:
        utils.ILOG("block addr:{}".format(hex(block_addr)))
    else:
        utils.ELOG("block addr format err:{}".format(block_addr_raw))
        return

    header = '''
    enum {
        BLOCK_HAS_COPY_DISPOSE =  (1 << 25),
        BLOCK_HAS_CTOR =          (1 << 26), // helpers have C++ code
        BLOCK_IS_GLOBAL =         (1 << 28),
        BLOCK_HAS_STRET =         (1 << 29), // IFF BLOCK_HAS_SIGNATURE
        BLOCK_HAS_SIGNATURE =     (1 << 30),
    };

    struct Block_literal_1 {
        void *isa; // initialized to &_NSConcreteStackBlock or &_NSConcreteGlobalBlock
        int flags;
        int reserved;
        void (*invoke)(void *, ...);
        struct Block_descriptor_1 {
            unsigned long int reserved; // NULL
            unsigned long int size;         // sizeof(struct Block_literal_1)
            // optional helper functions
            void (*copy_helper)(void *dst, void *src);     // IFF (1<<25)
            void (*dispose_helper)(void *src);             // IFF (1<<25)
            // required ABI.2010.3.16
            const char *signature;                         // IFF (1<<30)
        } *descriptor;
        // imported variables
    };
    '''

    code = header
    code += 'struct Block_literal_1 real = *((struct Block_literal_1 *)(void*){});'.format(
        block_addr)
    code += '''
    NSString* ret = @"";
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setObject:[NSNumber numberWithLong:(long)real.invoke] forKey:@"invoke"];

#if 0
    if (real.flags & BLOCK_HAS_SIGNATURE) {
        char *signature;
        if (real.flags & BLOCK_HAS_COPY_DISPOSE) {
            signature = (char *)(real.descriptor)->signature;
        } else {
            signature = (char *)(real.descriptor)->copy_helper;
        }
        
        NSMethodSignature *sig = [NSMethodSignature signatureWithObjCTypes:signature];
        NSMutableArray *types = [NSMutableArray array];
        
        [types addObject:[NSString stringWithUTF8String:(char *)[sig methodReturnType]]];
        
        for (NSUInteger i = 0; i < sig.numberOfArguments; i++) {
            char *type = (char *)[sig getArgumentTypeAtIndex:i];
            [types addObject:[NSString stringWithUTF8String:type]];
        }
        
        [dict setObject:types forKey:@"signature"];
    }
    
    NSMutableArray* sigArr = dict[@"signature"];
    
    if(!sigArr){
        ret = [NSString stringWithFormat:@"Imp: 0x%lx", [dict[@"invoke"] longValue]];
    }else{
        NSMutableString* sig = [NSMutableString stringWithFormat:@"%@ ^(", decode(sigArr[0])];
        for (int i = 2; i < sigArr.count; i++) {
            if(i == sigArr.count - 1){
                [sig appendFormat:@"%@", decode(sigArr[i])];
            }else{
                [sig appendFormat:@"%@ ,", decode(sigArr[i])];
            }
        }
        [sig appendString:@");"];
        ret = [NSString stringWithFormat:@"Imp: 0x%lx    Signature: %s", [dict[@"invoke"] longValue], [sig UTF8String]];
    }
    ret
#else
    dict
#endif
    '''
    ret = utils.exe_script(debugger, code)

    print(ret)