There are structure theorems related to this. Given a "good equation" defined over $\mathbb Z_p$, for a "good prime" $p$, a first try is to get the $p$-division points for the reduction modulo $p$. For instance:
sage: p = 3
sage: R, F, f = Zp(p), Qp(p), GF(p)
sage: E = EllipticCurve( f, [1,0,0,0,1] )
sage: E.order().factor()
2 * 3
sage: E(0).division_points(3)
[(0 : 1 : 0), (2 : 0 : 1), (2 : 1 : 1)]
Teichmüller lifts can (?!) then be constructed... For instance:
p = 3
R, F, f = Zp( p,4 ), Qp( p,4 ), GF(p)
Ef = EllipticCurve( f, [1,0,0,0,1] )
EF = EllipticCurve( F, [1,0,0,3,4] )
for point in Ef.points():
a,b,c = point
A,B,C = F(a.lift()), F(b.lift()), F(c.lift())
try:
POINT = EF.teichmuller( (A,B,C) )
print "%s -> %s" % ( point, POINT )
except:
print "%s -> ***" % point
This gives some lifts for the points where the valuation condition is verified:
(0 : 1 : 0) -> (0 : 1 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : 1 + O(3^4))
(0 : 1 : 1) -> (0 : 1 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : 1 + O(3^4))
(0 : 2 : 1) -> (0 : 2 + O(3^4) : 1 + O(3^4))
(1 : 1 : 1) -> ***
(2 : 0 : 1) -> (2 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : O(3^4) : 1 + O(3^4))
(2 : 1 : 1) -> (2 + 2*3 + 2*3^2 + 2*3^3 + O(3^4) : 1 + O(3^4) : 1 + O(3^4))